Вы не можете использовать атрибут экземпляра в качестве аргумента по умолчанию для метода - аргументы по умолчанию оцениваются во время определения метода, а не при его вызове, и в этот момент Python не имеет ни малейшего представления о том, что означает self
(поскольку экземпляры не былиеще создано).
Вам нужно будет ввести некоторую логику, чтобы проверить, какой аргумент передан методу или нет. Это проще всего использовать None
значения в качестве аргумента по умолчанию:
class User():
def __init__(self, name, password):
self.name = name
self.password = password
def edit(self, name=None, password=None):
if name is not None:
self.name = name
if password is not None:
self.password = password
Вы даже можете использовать троичный оператор, чтобы ввести логику в одну строку, если вы чувствуете, что это более читабельно:
class User():
def __init__(self, name, password):
self.name = name
self.password = password
def edit(self, name=None, password=None):
self.name = name if name is not None else self.name
self.password = password if password is not None else self.password