在重载类方法时引用self

时间:2013-04-11 18:52:28

标签: python default self

如果'重载'不是正确的术语,请原谅我......

我正在尝试做这样的事情:

class Length:

    def __init__(self, length = 0):
        self._length = length

    def twice(self, length = self._length):
        return length*2

正如您所看到的,我正在尝试在self._length的参数中引用twice()。 Python虽然不喜欢这个。我得到NameError: name 'self' is not defined

有没有一种很好的方法来分配这样的默认值并得到我想要的东西?

1 个答案:

答案 0 :(得分:11)

您不能将实例属性用作方法的默认参数。这些方法及其默认参数值是在定义类时定义的,但实例属性在实例化类之前不存在。

你必须这样做:

def twice(self, length=None):
    if length is None:
        length = self._length
    return length*2