当我覆盖子类中访问该子类中引入的属性的方法时,我试图找出出现 Attribute 错误的原因。在下面的代码中,您可以看到B工作正常,但仅当我在C.我想我可能不得不再次调用 populate 方法,但事实并非如此。# some class that uses a method to populate one of it's attributesclass A: def __init__(self): self.populate() # The original populating method def populate(self): self.x = 5my_obj = A()print(my_obj.x)# I can make a subclass that works fine AND has a new attributeclass B(A): def __init__(self): super().__init__() self.y = 9 def populate(self): self.x = 5my_obj = B()print(my_obj.x)print(my_obj.y)class C(A): def __init__(self): super().__init__() self.z = 7 self.populate() # This method overides the original one and causes an attribute error # because self.z is unknown def populate(self): self.x = self.zmy_obj = C()print(my_obj.x)
1 回答
波斯汪
TA贡献1811条经验 获得超4个赞
问题是x初始化对象时需要该属性C。在A.__init__调用self.populate()中已经是覆盖方法,即C.populate它需要self.x.
您可以self.z在调用父__init__方法之前进行设置:
class C(A):
def __init__(self):
self.z = 7
super().__init__()
def populate(self):
self.x = self.z
添加回答
举报
0/150
提交
取消
