Я пытаюсь найти причину, по которой я получаю ошибку атрибута при переопределении метода в подклассе, который обращается к атрибуту, представленному в этом подклассе.
В приведенном ниже коде вы видите, что 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)