我在下面提供了许多链接,这些链接比我所希望的更详细,更准确地回答了您的问题。但是,我也会用我自己的话回答您的问题,以节省您的时间。我会以分数为准-
- super是内置函数,不是属性。
- Python中的每个 类型 (类)都有一个
__mro__
属性,该属性存储该特定实例的方法解析顺序。 - 每个对super的调用都具有super(type [,object-or-type])的形式。让我们假设第二个属性目前是一个对象。
- 在超级调用的起点,对象是Derived类的类型( 例如DC )。
__init__
在指定为第一个参数的类(在本例中为DC之后的类)之后,super在MRO的类中寻找与(在您的情况下)匹配的方法。找到匹配方法后(例如在 BC1 类中),将调用该方法。
(此方法应该使用super,所以我假设它确实使用了-请参见Python的super很漂亮,但不能使用-
下面的链接)然后,该方法将在对象类的MRO中搜索下一个方法,即 BC1 。重复漂洗直到找到并调用所有方法。
您的示例的说明
MRO: D,B,C,A,object
super(D, self).__init__()
叫做。isinstance(self,D)=>是- 在D右边的类中的MRO中搜索 下一个方法 。
B.__init__找到并打电话
B.__init__
来电super(B, self).__init__()
。
isinstance(self,B)=>假
isinstance(self,D)=>真
因此,MRO相同,但是搜索继续到B的右边,即C,A,对象被一个一个地搜索。下一个
__init__
被称为。等等等等。
超级
http://www.python.org/download/releases/2.2.3/descrintro/#cooperation
的说明
使用超级
http://fuhm.net/super-harmful/
Pythons MRO算法 时需要注意的事项 :
http
://www.python.org/download/releases/2.3/mro/
超级的文档:
http
://docs.python.org/library/functions.html本页
底部有一个关于超级的不错的部分:
http:/ /docstore.mik.ua/orelly/other/python/0596001886_pythonian-
chp-5-sect-2.html
我希望这有助于清除它。



