使用self.super(*p,**kw)而不是super(cls,self).func(*p,**kw)
Improved-autosuper的Python项目详细描述
自动确定正确的超级对象并使用它。
这个模块定义了一个混合类- 超级的。
super返回的对象可以调用或访问属性。 如果调用它,则使用与当前方法同名的基类方法 将使用传递的参数调用。如果访问一个属性 将返回类属性。
用法示例:
import autosuper class A (autosuper.autosuper): def __init__ (self, a, b): self.super() print 'A.__init__' print a, b def test (self, a, b): print 'A.test' print b, a class B (A): def __init__ (self): self.super(1, 2) print 'B.__init__' self.super.test(3, 4) def test (self, a, b): print 'B.test' print a, b B()
产生:
A.__init__ 1 2 B.__init__ A.test 4 3
我们不需要在a.\uu init中调用self.super(),因为基类 是对象,但我们可以这样做。
注意,b.test从未被调用-调用到“self.super.test` 确保只搜索mro中较高类的方法来进行测试。
还要注意,调用self.super.super是一个错误 被抚养成人。
重要:假定每个方法的代码对象都是唯一的。 如果方法共享代码对象(例如 方法被分配给另一个方法)。
注意:出于性能原因,此实现修改 功能。若要禁用字节码修改,请将“修改字节码”设置为 错误。