Python:为什么我不能在课堂上使用`super`?

时间:2011-01-13 22:49:09

标签: python class python-3.x super

为什么我不能使用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,   型)

     

[编辑非相关的例子]

2 个答案:

答案 0 :(得分:8)

看起来你需要一个B实例作为第二个参数传入。

http://www.artima.com/weblogs/viewpost.jsp?thread=236275

答案 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