继承类中的python __init__方法

新手上路,请多包涵

我想给子类一些额外的属性,而不必显式调用新方法。那么有没有办法给继承类一个 __init__ 类型的方法,它不会覆盖父类的 __init__ 方法?

我编写下面的代码纯粹是为了说明我的问题(因此属性命名不当等)。

 class initialclass():
    def __init__(self):
        self.attr1 = 'one'
        self.attr2 = 'two'

class inheritedclass(initialclass):
    def __new__(self):
        self.attr3 = 'three'

    def somemethod(self):
        print 'the method'

a = inheritedclass()

for each in a.__dict__:
    print each

#I would like the output to be:
attr1
attr2
attr3

谢谢

原文由 Anake 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 393
2 个回答

据我所知这是不可能的,但是你可以像这样调用超类的 init 方法:

 class inheritedclass(initialclass):
    def __init__(self):
        initialclass.__init__(self)
        self.attr3 = 'three'

原文由 Yexo 发布,翻译遵循 CC BY-SA 3.0 许可协议

只需调用父母的 __init__ 使用 super

 class inheritedclass(initialclass):
    def __new__(self):
        self.attr3 = 'three'
        super(initialclass, self).__init__()

我强烈建议遵循 Python 的命名约定并以大写字母开始一个类,例如 InheritedClassInitialClass 。这有助于快速区分类与方法和变量。

原文由 Adam Matan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题