Python 3.x 使用类方法作为默认kwarg参数?

Python 3.x 使用类方法作为默认kwarg参数?,python-3.x,lambda,keyword-argument,Python 3.x,Lambda,Keyword Argument,这是一个超级精心设计的示例,但我一直想将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() >>> NameEr

这是一个超级精心设计的示例,但我一直想将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和n,然后添加一些条件逻辑来完成这项工作

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.
但是我想要的是去掉函数中对条件逻辑的需要。我可以用lambda作为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>.
class Robot():
def get_名称(自身):
返回“Bob”
def speak(self,name=lambda name:self.get_name()):
print('hello,我的名字是{name}.'.format(name=name))
r=机器人()
r、 讲
>>>你好,我的名字是。

我认为使用
None
是做你想做的事情的常用方法。任何试图理解代码的人都可能会对其他内容感到困惑。是的,你可能是对的。尽管如此,他还是很好奇。