Простой вопрос про классы

подскажите в чем ошибка? Почему self не определен?

class mono(object):
    """docstring"""

    def __init__():
        self.url, self.headers, self.session = login()
        



    def login():
        self.url = '12345'
        self.headers = '12345'
        session = '12345'
        return self.url, self.headers, self.session




    def get_df_1(self, url=self.url, headers=self.headers, session=self.session):
        print(self.url)
        print(self.headers)
        print(self.session)

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


Ответы (1 шт):

Автор решения: gil9red

Тут def __init__(): и тут def login(): нет аргумента self.

Вообще, во все методы нужно self писать. Есть 2 исключения:

  • Статичные методы. Для них к методам добавляется декоратор staticmethod
  • Методы класса. Для них к методам добавляется декоратор classmethod и вместо self используется cls

Нельзя в значениях по-умолчанию указывать self самого класса, это вещь доступна только внутри методов:

def get_df_1(self, url=self.url, headers=self.headers, session=self.session):

Можно сделать так, тогда если какие-либо параметры не будут заданы, будут использоваться поля объекта:

def get_df_1(self, url=None, headers=None, session=None):
    if not url:
        url = self.url

    if not headers:
        headers = self.headers

    if not session:
        session = self.session

    print(url)
    print(headers)
    print(session)

Вариант без параметров, просто используем поля объекта:

def get_df_1(self):
    print(self.url)
    print(self.headers)
    print(self.session)
→ Ссылка