Использование метода класса в качестве аргумента kwarg по умолчанию? - PullRequest
0 голосов
/ 10 января 2020

Это очень надуманный пример, но я хотел назначить значение по умолчанию для аргумента 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>.
...