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
谢谢
6 个回答
6
首先,你把 __init__
和 __new__
混淆了,它们是 不同的东西。__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__()
17
只需要用 super
来调用父类的 __init__
方法:
class inheritedclass(initialclass):
def __new__(self):
self.attr3 = 'three'
super(initialclass, self).__init__()
我强烈建议遵循Python的命名规则,类名要用大写字母开头,比如 InheritedClass
和 InitialClass
。这样可以很快区分出类和方法、变量。
39
据我所知,这是不可能的。不过,你可以像这样调用父类的初始化方法:
class inheritedclass(initialclass):
def __init__(self):
initialclass.__init__(self)
self.attr3 = 'three'