python实例变量作为可选参数

7 python class function

在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)

  • 使用"是"来比较无更好(和更快) (4认同)

Ale*_*lli 5

所有回复都表明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从中获取实例变量.