在重载类方法时引用self

mrK*_*ley 2 python default self

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

我想做这样的事情:

class Length:

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

    def twice(self, length = self._length):
        return length*2
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我试图self._length在论证中引用twice().Python虽然不喜欢这个.我得到NameError: name 'self' is not defined.

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

Bre*_*arn 11

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

你必须做:

def twice(self, length=None):
    if length is None:
        length = self._length
    return length*2
Run Code Online (Sandbox Code Playgroud)