Ошибка при вызове функции

Что надо исправить или добавить?

def a(self):
    self.a = "lol"

def b(self):
    print(self.a)

Получаю ошибку:

b() missing 1 required positional argument: 'self'

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

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

У функций указано по одному аргументу, однако они не заданы при вызове. Чтобы вызывать эти функции без явного указания аргумента, необходимо сделать их членами класса.

class Test:
    def a(self):
        self.a = "lol"

    def b(self):
        print(self.a)

https://docs.python.org/3/tutorial/classes.html

Если же вы хотели указывать поле "a" у какого-то конкретного объекта, то следует указывать его при вызове функции

test = object()
a(test)
b(test)
→ Ссылка
Автор решения: CrazyElf

Видимо, это методы класса, поэтому я опишу класс Test с этими методами:

class Test:
  def a(self):
    self.a = "lol"

  def b(self):
    print(self.a)

Попробуем вызвать b как метод класса:

Test.b()

Вывод:

TypeError: b() missing 1 required positional argument: 'self'

Поскольку у методов a и у b есть параметр self, их правильно вызывать не от класса, а от экземпляра класса, тогда параметр self передастся автоматически:

t = Test()
t.a()
t.b()

Вывод:

lol

Однако, в вашем коде есть ещё одна проблема, попробуем вызвать метода a два раза подряд:

t = Test()
t.a()
t.a()

Вывод:

TypeError: 'str' object is not callable

Дело в том, что вас есть функция Test.a, однако в экземпляре этого класса вы когда делаете в методе a присваивание self.a = "lol", вы таким образом затираете ссылку на функцию a строкой lol. Python хранит все имена вместе, ему всё-равно что это - переменная или функция. Под одним именем может быть только одна какая-то сущность, вне зависимости от того, как эта сущность используется. Так что не делайте у методов и полей класса одинаковые названия, чтобы они друг-друга не затирали.

→ Ссылка