我试图了解何时以及如何在Python中正确使用super()(2.7.x或3.x)
在>>> help(super)
翻译告诉我怎么称呼它:
class super(object)
| super(type) -> unbound super object
| super(type, obj) -> bound super object; requires isinstance(obj, type)
| super(type, type2) -> bound super object; requires issubclass(type2, type)
我了解在Python3.x中现在可以在类定义中使用super(),但是我不明白为什么super(obj)
不可能。或super(self)
在类定义中。
我知道一定有原因,但是我找不到。对我来说,这些行等于super(obj.__class__, obj)
或,super(self.__class__, self)
并且行得通吗?
我认为super(obj)
即使在Python 3.x中,键入也是一个不错的快捷方式。
仅在Python
2中才需要两个参数的形式。其原因是,它self.__class__
总是引用继承树中的“叶子”类(即对象的最特定类),但是调用super
时需要告诉它是当前正在调用的实现,因此它可以在继承树中调用下一个实现。
假设您有:
class A(object):
def foo(self):
pass
class B(A):
def foo(self):
super(self.__class__, self).foo()
class C(B):
def foo(self):
super(self.__class__, self).foo()
c = C()
需要注意的是c.__class__
是C
,始终。现在考虑如果您打电话给我会发生什么c.foo()
。
当您调用super(self.__class__, self)
C的方法时,它将类似于call super(C, self)
,这意味着“调用C继承的此方法的版本”。那会叫B.foo
,这很好。但是当您super(self.__class__, self)
从B呼叫时,它仍然像在呼叫super(C, self)
,因为它是相同的self
,所以self.__class__
仍然如此C
。结果是B中的调用将再次调用,B.foo
并且发生无限递归。
当然,您真正想要的是能够调用super(classThatDefinedTheImplementationThatIsCurrentlyExecuting, self)
,这实际上就是Python 3super()
所做的。
在Python 3中,您可以做,super().foo()
并且可以做正确的事。对我来说,你对super(self)
捷径的含义还不清楚。在Python
2中,由于上述原因,它不起作用。在Python 3中,这将是“ longcut”,因为您可以只使用Plain super()
。
该super(type)
和super(type1, type2)
用途可能仍然偶尔需要在Python 3,但那些总是不正常的情况下,更深奥的用途。
目前正在使用React Native,并尝试使用React Native nfc ios和React national nfc,以便我可以在ios和Android之间进行跨设备通信。我发现他们无法沟通,但我认为这是由于一个更广泛的问题(因为其他现有的应用程序也无法工作)。 如果我在iPhone7上下载NFC阅读器应用程序,在Android上下载NFC写入器应用程序,它们就无法通信。这是为什么呢?
如果你曾经使用过构建工具,你可能会对遇到的问题感到很沮丧,构建工具不是应该自动帮你完成项目的构建吗?你不得不向性能、扩展性等妥协。 比如你在构建一个项目的发布版本时,你要把一个文件拷贝到指定的位置,你在项目的元数据那里添加了版本的描述,如果版本号匹配一个特定的数字时,就把文件从A拷贝到B处。如果你依赖XML来构建,你要实现这个任务就像噩梦一样,你只能通过非标准的机制来添加一些脚本到构建中,结果就是
来源:https://github.com/atom-china/manual 这个世界上有那么多种编辑器,为什么你要花时间学习和使用 Atom 呢? 虽然 Sublime 和 TextMate 之类的编辑器已经非常好用了,但它们仅提供了很有限的拓展性。而在另一个极端,Emacs 和 Vim 提供了灵活的拓展性,但它们并不是很友好,需要使用专用的编程语言来配置和拓展。 我们觉得我们可以做得更好。我
为什么选择 NuxtJS
Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型. 作为负载均衡服务器:Ngin
虽然市场上有几十种不同的版本控制系统,一些世界上最著名的项目(例如 Linux 内核, Ruby on Rails,或是jQuery)都选择了使用 Git 作为它们的版本控制系统。为什么它们都选择 Git 呢? 节省时间 Git 运行快速。尽管我们在这里讨论的只是运行一个命令所需要的几秒钟,但是把它累积在你的日常工作中就是一个不小的飞跃了。它可以节省那些不必要的等待时间,并且去完成其它一些有意义的