Ошибка при вызове функции
Что надо исправить или добавить?
def a(self):
self.a = "lol"
def b(self):
print(self.a)
Получаю ошибку:
b() missing 1 required positional argument: 'self'
Ответы (2 шт):
У функций указано по одному аргументу, однако они не заданы при вызове. Чтобы вызывать эти функции без явного указания аргумента, необходимо сделать их членами класса.
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)
Видимо, это методы класса, поэтому я опишу класс 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 хранит все имена вместе, ему всё-равно что это - переменная или функция. Под одним именем может быть только одна какая-то сущность, вне зависимости от того, как эта сущность используется. Так что не делайте у методов и полей класса одинаковые названия, чтобы они друг-друга не затирали.