andrey_u
@andrey_u

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

Только недавно начал изучать классы, посмотрите пожалуйста мой код и подскажите как из одного экземпляра класса в Python добраться в другой!

class User:
    def __init__(self, user_fields):
        # так можно делать?
        for k, v in user_fields.items():
            self.__dict__.__setitem__(k, v)

    def save(self):
        print('Как отсюда можно получить доступ к переменной token в MyApi или вызвать some_func() ???')


class MyApi:
    def __init__(self, token, users_data):
        self.token = token
        self.users = [User(user) for user in users_data]

    def some_func(self):
        print(self.token)


users_data = [
    {
        'name': 'andrey',
        'age': 25
    },
    {
        'name': 'dima',
        'age': 12
    }
]

api = MyApi('12345', users_data)

user = api.users[0]
user.save()

print('User name:', user.name)


Вот мой вариант решения:
class User:
    def __init__(self, api, user_fields):
        # так можно делать?
        for k, v in user_fields.items():
            self.__dict__.__setitem__(k, v)

    def save(self):
        print('Вызываю some_func() из class User, token:', api.some_func())

class MyApi:
    def __init__(self, token, users_data):
        self.token = token
        self.users = [User(self, user) for user in users_data]

    def some_func(self):
        return self.token


users_data = [
    {
        'name': 'andrey',
        'age': 25
    },
    {
        'name': 'dima',
        'age': 12
    }
]

api = MyApi('12345', users_data)

user = api.users[0]
user.save()
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ответы на вопрос 1
gnifajio
@gnifajio
Совершенствуюсь каждый день
Чтобы из одного экземпляра класса добраться в другой, вам нужно в первом экземпляре класса хранить ссылку на второй экземпляр. Для этого вы можете в конструкторе класса User добавить аргумент api, который будет ссылкой на экземпляр класса MyApi, и сохранить его в свойстве экземпляра self.api. Затем в методе save вы сможете обратиться к этому свойству и вызвать нужные методы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы