Как внутри одного класса обратиться к атрибутам другого класса?
Только начинаю постигать азы ООП, и уперся в следующую проблему: в методе receprtion класса Warehouse необходимо обратиться к атрибуту (например, model) другого класса. Если обращаться через class_name.attribute - пишет, что такого атрибута у класса нет. Корректно работает, только если обращаться напрямую к атрибуту созданного экземпляра класса. Но поскольку объектов будет больеше одного, то данный вариант не подходит. Каким образом возможно реализовать данный функционал?
class Warehouse:
def __init__(self, sales, storage, repairs):
self.sales = sales
self.storage = storage
self.repairs = repairs
def reception(self):
return f'{Equip.model} принята на склад'
class Equip:
def __init__(self, model, quantity, price):
self.model = model
self.quantity = quantity
self.price = price
@classmethod
def uniq_param(cls):
pass
class Xerox(Equip):
def __init__(self, model, quantity, price):
super().__init__(model, quantity, price)
def uniq_param(self):
return 'Ксерокс делает ксерографические копии'
w = Warehouse('Отдел продаж', 'отдел хранения', 'отдел ремонта')
x = Xerox(6525, 2, 1000)
print(x.model)
print(w.reception())
Ответы (2 шт):
Попробуйте так:
class Warehouse:
def __init__(self, sales, storage, repairs):
self.sales = sales
self.storage = storage
self.repairs = repairs
def reception(self, x): # +++ x
# return f'{Equip.model} принята на склад'
return f'{x.model} принята на склад' # x.model
class Equip:
def __init__(self, model, quantity, price, data=[]): # data=[] - для первой инициализации
self.model = model
self.quantity = quantity
self.price = price
self.data = data # +++
@classmethod
def uniq_param(cls):
pass
class Xerox(Equip):
def __init__(self, model, quantity, price):
super().__init__(model, quantity, price)
self.data.append([model, quantity, price]) # +++
def uniq_param(self):
return 'Ксерокс делает ксерографические копии'
w = Warehouse('Отдел продаж', 'отдел хранения', 'отдел ремонта')
x = Xerox(6525, 2, 1000)
#print(w.reception(x))
print(f'model={x.model}: {w.reception(x)}\n')
x = Xerox(7777, 27, 1777)
print(f'model={x.model}: {w.reception(x)}\n')
x = Xerox(3333, 23, 1733)
print(f'model={x.model}: {w.reception(x)}\n')
print(*x.data, sep='\n')
Благодаря ответам выше все заработало)) Немного изменил код в следующих блоках: Добавил аргумент, который принимает метод. Данный аргумент уже имеет все атрибуты другого класса, к которым можно обращаться.
def reception(self, tech):
return f'Техника {tech.model} в количестве {tech.quantity} ед. была принята на склад'
В метод, отвечающий за прием(reception) добавил тот объект, который принимается
w = Warehouse('Отдел продаж', 'отдел хранения', 'отдел ремонта')
x = Xerox('Xerox 6525', 8, 1000)
y = Xerox('Xerox 3525', 1, 500)
print(w.reception(x))
print(w.reception(y))
