Как прокомментировал Остин, init ожидает значение для параметра lname.
Вы, кажется, новичок в python, поэтому предложите вам использовать подобное руководство, чтобы лучше понятьпараметры функции https://www.tutorialspoint.com/python/python_functions.htm
Я постараюсь немного подвести итог.Существует несколько способов объявления аргументов функции:
- Позиционный (ваш случай): параметры являются обязательными и должны быть вызваны в этом порядке (*).Например:
def f(arg1, arg2):
print(arg1)
print(arg2)
f(1, 2)
# OUT: 1
# OUT: 2
Аргументы по умолчанию.Они имеют значение по умолчанию, если они явно не установлены пользователем.Они уважают порядок (*) и должны всегда идти после позиционных.Пример:
def f(arg1, arg2="default"):
print(arg1)
print(arg2)
f(1)
# OUT: 1
# OUT: default
f(1, 2)
# OUT: 1
# OUT: 2
Параметры переменной длины (* аргументы).Они идут и получают все параметры из этой точки в кортеж.Они отмечены символом
*
.Пример:
def f(arg1, *args):
print(arg1)
print(args)
f(1)
# OUT: 1
# OUT: ()
f(1, 2, 3, 4, 5)
# OUT: 1
# OUT: (2, 3, 4, 5)
Аргументы ключевых слов (
**kwargs
).Как Получить все именованные параметры, имя которых не является позиционным параметром или параметром по умолчанию в словаре.Они отмечены
**
.Пример:
def f(arg1, **kwargs):
print(arg1)
print(kwargs)
f(1)
# OUT: 1
# OUT: {]
f(1, a=2, b=3, c=4, d=5)
# OUT: 1
# OUT: {'a':2, 'b':3, 'c': 4, 'd:' 5}
(*) Параметры можно передавать по имени, поэтому вы можете использовать порядок, который вам нравится, таким образом.НО, если вы передаете параметр по имени, следующие параметры также должны быть переданы по имени.