在阅读 OpenStack 的代码时,我遇到了这个问题。
名为’Service’的类继承基类’object’,然后在Service的 __init__()
方法中,调用对象的 __init__
。相关代码如下所示:
类定义:
class Service(object):
和服务的初始化方法定义:
def __init__(self, host, binary, topic, manager, report_interval=None,
periodic_interval=None, *args, **kwargs):
并在 Service 的 init 中调用 super(这里的“对象”):
super(Service, self).__init__(*args, **kwargs)
我不明白最后一个电话, object.__init__()
它实际上做了什么?谁能帮忙?
原文由 can. 发布,翻译遵循 CC BY-SA 4.0 许可协议
简短的回答是 object.init() 方法除了检查是否没有传入任何参数外什么都不做。有关详细信息,请参阅 源代码。
当在 Service 的实例上调用时, super() 调用将委托给 object.init() 并且什么都不会发生。
然而,当调用 Service 子类的实例时,事情变得更有趣了。 super() 调用可能会委托给 object 以外的某个类,该类是实例的父类,但不是 Service 的父类。有关其工作原理和有用原因的详细信息,请参阅博客文章 Python 的 Super Considered Super !
下面的例子(有点做作)显示了 Service 的子类如何导致 Service 中 的 超级 调用被定向到另一个名为 Color 的类:
在示例中,初始化按以下顺序进行: