继承类中的python初始化方法

2024-10-06 11:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想给一个子类一些额外的属性,而不必显式地调用一个新方法。那么有没有一种方法可以给继承的类一个不重写父类的__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

谢谢你


Tags: the方法self属性initdef子类class
3条回答

只需使用super调用父对象的__init__

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

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

据我所知,这是不可能的,但是您可以调用超类的init方法,如下所示:

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

首先你要混合__init____new__,它们是different things__new__不以实例(self)为参数,而是以类(cls)为参数。 至于问题的主要部分,您需要做的是使用super调用超类__init__

您的代码应该如下所示:

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

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

相关问题 更多 >