假设我初始化以下类并尝试调用类似的方法:
class tester():
def __init__(self, test):
self.test=test
def caller(self, test=test):
return test
t=tester(6)
t.caller()
#error
我希望方法“调用方”中参数“ test”的默认arg是实例的self.test。相反,我收到未定义“测试”的错误。如果将test = test替换为test = self.test,则会收到未定义“ self”的错误。
按如下所示直接为类设置变量不会导致错误,但是当然只是从类而不是从实例返回“测试”:
class tester():
test=1
def __init__(self, test):
self.test=test
def caller(self, test=test):
return test
t=tester(6)
t.caller()
#returns 1
如何专门将实例self.test用作该方法的默认arg?之所以要这样做,是因为我将创建很多函数,这些函数将共享与该类的每个实例一致的许多相同参数。方法参数可以默认为实例的默认值,而不是直接传递这些参数。
我不想直接在调用程序中直接访问实例变量,而是依赖默认方法参数的原因是,因为有时我希望可以选择使用不同的值来调用这些函数。
答案 0 :(得分:3)
在类定义时会评估默认参数值,因此无法定义默认的每个实例。在类定义时,将使用单个默认值创建该方法对象。
实现所需目标的典型方法如下:
def caller(self, test=None):
if test is None
test = self.test
...