Это очень надуманный пример, но я хотел назначить значение по умолчанию для аргумента kwarg возвращаемому значению метода класса.
class Robot():
def get_name(self):
return 'Bob'
def speak(self, name=self.get_name()):
print('hello, my name is {name}.'.format(name=name))
r = Robot()
r.speak()
>>> NameError: name 'self' is not defined
Я смог сделать это долго вручную, по умолчанию None и затем добавляя некоторые условные логики c позже.
class Robot():
def get_name(self):
return 'Bob'
def speak(self, name=None):
if not name:
name = self.get_name()
print('hello, my name is {name}.'.format(name=name))
r = Robot()
r.speak()
>>>hello, my name is Bob.
Но я хотел бы убрать необходимость условных логик c в функции. Могу ли я добиться того же с помощью лямбды в качестве значения по умолчанию для kwarg? Это то, что я пробовал до сих пор:
class Robot():
def get_name(self):
return 'Bob'
def speak(self, name=lambda name: self.get_name()):
print('hello, my name is {name}.'.format(name=name))
r = Robot()
r.speak()
>>>hello, my name is <function Robot.<lambda> at 0x103a4f5f0>.