【发布时间】:2020-08-14 04:35:34
【问题描述】:
直接初始化继承的类而不是使用 super().__init__() 时,__dict__ 方法不会产生相同的结果。为什么?:
class A:
def __init__(self):
self.att_a = "A"
class B:
def __init__(self):
self.att_b = "B"
class C(A, B):
def __init__(self):
A.__init__(self)
B.__init__(self)
self.att_c = "C"
def get_att(self):
print(self.__dict__)
c = C()
c.get_att()
结果:{'attA': 'A', 'attB': 'B', 'attC': 'C'}
为什么使用super().__init__() 不会产生相同的结果:
class A:
def __init__(self):
self.att_a = "A"
class B:
def __init__(self):
self.att_b = "B"
class C(A, B):
def __init__(self):
super().__init__() # Modification
self.att_c = "C"
def get_att(self):
print(self.__dict__)
c = C()
c.get_att()
结果:{'att_a': 'A', 'att_c': 'C'}
【问题讨论】:
-
另见stackoverflow.com/questions/9575409。注意这个问题与
__dict__无关。这只是与调用什么和不调用什么有关:在您的super()示例中,A.__init__()被调用而B.__init__()不被调用。
标签: python