Итак, я читал о композиции в Python, и мне интересно, есть ли способ интегрировать установку атрибутов «базовых объектов», не ссылаясь конкретно на «базовый класс» (как это делается в закомментированных частяхприведенный ниже код.
Итак, я ищу приведенный ниже код для печати:
1
2
3
4
Success
Но с помощью этого фрагмента я генерирую RecursionError.
IsЕсть ли способ (кроме self.ax = n) обновить атрибут класса A, чтобы он был доступен другим составным классам (класс C в этом примере)?
class A:
def __init__(self):
self.x = 1
class B:
def __init__(self, a):
self.a = a
self.y = 2
print(self.x)
print(self.y)
self.x = 3
# would work if "self.a.x = 3"
# and "__setattr__" commented out
def __getattr__(self, attr):
return getattr(self.a, attr)
# setattr would have to be commented out here too
def __setattr__(self, attr, val):
setattr(self.a, attr, val)
class C:
def __init__(self, a):
self.a = a
print(self.x)
self.x = 4
print(self.x)
try:
print(self.y)
except AttributeError:
print('Sucess')
def __getattr__(self, attr):
return getattr(self.a, attr)
def __setattr__(self, attr, val):
setattr(self.a, attr, val)
a = A()
b = B(a)
c = C(a)