为什么不使用实例属性作为默认参数?

时间:2014-02-09 20:45:49

标签: python

我试图将实例属性用作默认参数。不幸的是,python似乎没有认识到“自我”变量

class Example(object):

    def __init__(self, name):
        self.bar = ""

    def foo(self, param=self.bar):
        print self.bar

为什么python不允许在方法签名中使用self?另外,任何提示都能顺利实现类似结果,而不使用自我?

2 个答案:

答案 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并检查方法内的该值。