Как внутри одного класса обратиться к атрибутам другого класса?

Только начинаю постигать азы ООП, и уперся в следующую проблему: в методе 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 шт):

Автор решения: S. Nick

Попробуйте так:

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')

введите сюда описание изображения

→ Ссылка
Автор решения: Artyom Lisenkov

Благодаря ответам выше все заработало)) Немного изменил код в следующих блоках: Добавил аргумент, который принимает метод. Данный аргумент уже имеет все атрибуты другого класса, к которым можно обращаться.

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))

→ Ссылка