亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何解決重寫方法導致的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 關注
  • 231 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號