我试图将实例属性用作默认参数。不幸的是,python似乎没有认识到“自我”变量
class Example(object):
def __init__(self, name):
self.bar = ""
def foo(self, param=self.bar):
print self.bar
为什么python不允许在方法签名中使用self?另外,任何提示都能顺利实现类似结果,而不使用自我?
答案 0 :(得分:2)
self
是函数的参数。因此,在您输入函数之前,您无法执行self.something
,因为在输入函数之前没有self
的定义。
您可以执行以下操作:
class Example(object):
def __init__(self, name):
self.bar = name
def foo(self, param=None):
if param is None:
param = self.bar
# do stuff with param, which now defaults to self.bar
答案 1 :(得分:2)
有两个原因。首先,因为self也是一个参数,因此只存在于方法体本身内,而不存在于函数签名中。
但其次,更重要的是,函数默认值在定义它们时进行评估,而不是在它们被调用时进行评估。所以这将引用一个尚未创建的实例。
答案是定义默认值为None
并检查方法内的该值。