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

当我覆盖子类中访问该子类中引入的属性的方法时,我试图找出出现 Attribute 错误的原因。


在下面的代码中,您可以看到B工作正常,但仅当我在C.


我想我可能不得不再次调用 populate 方法,但事实并非如此。


# some class that uses a method to populate one of it's attributes

class A:

    def __init__(self):

        self.populate()


    # The original populating method

    def populate(self):

        self.x = 5


my_obj = A()

print(my_obj.x)


# I can make a subclass that works fine AND has a new attribute

class B(A):

    def __init__(self):

        super().__init__()

        self.y = 9


    def populate(self):

        self.x = 5


my_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.z


my_obj = C()

print(my_obj.x)


神不在的星期二
浏览 255回答 1
1回答

波斯汪

问题是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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python