我很难让以下代码正常工作。func函数应该只返回self.test值,但代码似乎无法完成任务。我想要self.test作为函数的默认值。
class model():
def __init__(self):
self.test=1
def func(self, test=self.test):
return(test)
model=model()
model.func()
函数默认值是在定义时计算的,而不是每次在没有必要参数的情况下调用函数时计算的。因此,self
只是一个名称,而不是调用函数的对象。
相反,您只需要一个sentinel,这是一个可以在运行时用来确定是否传递了参数的值。通常,您可以使用None
,但是当None
是一个有效的参数时,您需要选择一个不同的值。
def func(self, test=None):
if test is None:
test = self.text
return test
你可以这样做:
class model():
def __init__(self):
self.test=1
def func(self, test=None):
# replaces only None test with self.test
if test is None:
test = self.test
return test
def func2(self, test=None):
# replaces any falsy test with self.test
# falsy are [], {}, "", 0, ...
test = test or self.test
return test
model = model()
model.func()
两者都会禁用将None
作为有效值提供给函数的功能。