When calling super() in a derived class, can I pass in self.__class__?
本问题已经有最佳答案,请猛点这里访问。
我最近发现(通过stackoverflow)要调用基类中的方法,我应该调用:
很好,它起作用了。但是,当我进行更改时,我发现自己经常在类之间复制和粘贴,并且经常忘记将派生类参数固定到super()函数。
我想避免不得不记住更改派生类参数。我可以用
这似乎可行,但我为什么不这样做有充分的理由吗?
不,你不能。
如果你通过了
在构成方法解析顺序序列的类列表中,将其视为指针。如果传入
以下代码导致无限递归错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Base(object): def method(self): print 'original' class Derived(Base): def method(self): print 'derived' super(type(self), self).method() class Subclass(Derived): def method(self): print 'subclass of derived' super(Subclass, self).method() |
演示:
1 2 3 4 5 6 7 8 9 10 11 12 | >>> Subclass().method() subclass of derived derived derived derived <... *many* lines removed ...> File"<stdin>", line 4, in method File"<stdin>", line 4, in method File"<stdin>", line 4, in method RuntimeError: maximum recursion depth exceeded while calling a Python object |
因为
在这个例子中,