【发布时间】:2012-05-23 22:10:45
【问题描述】:
为什么我在 Python 代码中看不到以下内容?
class A:
def __init__(self, ...):
# something important
class B(A):
__init__ = A.__init__
它似乎在我的机器上运行 Python 2.5、2.6、2.7 和 PyPy 1.8。
我经常看到以下内容:
class B(A):
def __init__(self, *args, **kwargs):
A.__init__(self, *args, **kwargs)
或者使用super的东西。
我更喜欢我的第一个示例(显式优于隐式!)但我担心由于某种原因它不符合犹太教规。它有什么问题或坏处吗?
编辑:是的,我的意思是A.__init__,而不是self.__init__
【问题讨论】:
-
我不明白
__init__ = self.__init__在这种情况下会如何做任何事情。self不是 Python 中的关键字。 -
我想,也许是
__init__ = A.__init__? -
有什么理由打扰吗?如果您没有在子类中声明一个,父类的构造函数将被继承。只有在做额外的事情时才需要覆盖它。
-
如果您看到该结构(即,
__init__中没有额外的代码)我会怀疑代码是由没有 Python 经验的人编写的,并且习惯于用另一种语言做这些事情 -
@gnibbler 或者它可能是一个存根。我想不出一种语言,你必须重写子类中除了调用 super 什么都不做的方法。
标签: python