@Pavelmaximov

Как передать атрибуты из одного класса в другой (не из метакласса)?

Всем привет. Изучаю питон, помогите разобраться с классами.

Пишу обертку над апи.

class Auth: 
    # авторизация несколькими способами, полученный токен
    # записываю в аргумент
    def __init__(self): 
        self.token = None        
        
    def set_token(token): 
        # один из способов авторизации
        self.token = token
        return self.token

class Api: 
    # Отправляет запрос к апи, на вход принимает URL
    def request(url): 
        print('отправляю запрос на', url)
               
class Stat: 
    def __init__(self): 
        self._api = Api()
        self.token = как в этот класс передать аргумент из Auth?
        
    def get(date1, date2):
        url = date1 + date2 + self.token
        return self._api.request(url)
    

auth = Auth()
auth.set_token('0000001AA')

auth.Stat.get('2016', '2017')


не знаю как из auth передать полученный токен в Stat и чтоб при этом осталась иерархия,
потому что помимо Stat, есть другие методы. Выше вариант, до которого я додумался и который не работает)

Я так представляю иерархию файлов:
yandexApi
yandexApi.auth
yandexApi.api

yandexApi.metrica.management
yandexApi.metrica.stat
yandexApi.metrica.logsapi

спасибо
  • Вопрос задан
  • 879 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Pavelmaximov Автор вопроса
я нашел такой способ, только не знаю насколько он экологичен

class Auth: 
    # авторизация несколькими способами, полученный токен
    # записываю в аргумент
    def __init__(self): 
        self.token = None        
        
    def set_token(self, token): 
        # один из способов авторизации
        self.token = token
        return self.token

class Api: 
    # Отправляет запрос к апи, на вход принимает URL
    def request(self, url): 
        print('отправляю запрос на', url)
               
class Stat: 
    def __init__(self): 
        self._api = Api()
        self.auth = Auth()
        
    def get(self, date1, date2):
        url = date1 + date2 + self.auth.token
        return self._api.request(url)
    
    
st = Stat()
st.auth.set_token('token111aaa')

st.get('2016', '2017')

out: отправляю запрос на 20162017token111aaa
Ответ написан
Ваш ответ на вопрос

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

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