在python中,有没有办法在类方法中使用实例变量作为可选参数?即:
def function(self, arg1=val1, arg2=val2, arg3=self.instance_var):
# do stuff....
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
Unk*_*own 13
试试这个:
def foo(self, blah=None):
if blah is None: # faster than blah == None - thanks to kcwu
blah = self.instance_var
Run Code Online (Sandbox Code Playgroud)
所有回复都表明None是正确的; 如果你想确保调用者可以将None作为常规参数传递,请使用特殊的sentinel测试is:
class Foo(object):
__default = object()
def foo(self, blah=Foo.__default):
if blah is Foo.__default: blah = self.instavar
Run Code Online (Sandbox Code Playgroud)
每次调用object()都会创建一个唯一的对象,这样is在它和任何其他值之间永远不会成功.这两个下划线的__default意思是"强烈私密",这意味着调用者知道他们不应该试图搞砸它(并且需要做一些工作才能这样做,明确地模仿编译器正在做的名称错误).
您不能只使用您发布的代码(btw)的原因是,在def语句评估时,默认值会计算,而不是在调用时间之后; 并且在def评估时,还没有self从中获取实例变量.