为什么我不能使用super
来获取类的超类的方法?
示例:
Python 3.1.3
>>> class A(object):
... def my_method(self): pass
>>> class B(A):
... def my_method(self): pass
>>> super(B).my_method
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
super(B).my_method
AttributeError: 'super' object has no attribute 'my_method'
(当然这是一个简单的案例,我可以做A.my_method
,但我需要这个以钻石继承的情况。)
根据super
的文档,似乎我想要的应该是可能的。这是super
的文档:(强调我的)
相同
super()
- &gt;与super(__class__, <first argument>)
super(type)
- &gt;未绑定的超级对象
super(type, obj)
- &gt;绑定super
宾语;需要isinstance(obj, type)
super(type,type2) - &gt;超级的 宾语;需要issubclass(type2, 型)
[编辑非相关的例子]
答案 0 :(得分:8)
看起来你需要一个B实例作为第二个参数传入。
答案 1 :(得分:6)
根据this,我似乎只需要致电super(B, B).my_method
:
>>> super(B, B).my_method
<function my_method at 0x00D51738>
>>> super(B, B).my_method is A.my_method
True