为了账号安全,请及时绑定邮箱和手机立即绑定

如何解决重写方法导致的AttributeError

如何解决重写方法导致的AttributeError

神不在的星期二 2021-12-26 10:59:09
当我覆盖子类中访问该子类中引入的属性的方法时,我试图找出出现 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


查看完整回答
反对 回复 2021-12-26
  • 1 回答
  • 0 关注
  • 254 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号