Python 重载类方法时引用self

Python 重载类方法时引用self,python,default,self,Python,Default,Self,如果“过载”不是这里的正确术语,请原谅 我正在尝试这样做: class Length: def __init__(self, length = 0): self._length = length def twice(self, length = self._length): return length*2 如您所见,我试图在tweep()的参数中引用self.\u length。但是Python不喜欢这样。我得到名称错误:未定义名称“self

如果“过载”不是这里的正确术语,请原谅

我正在尝试这样做:

class Length:

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

    def twice(self, length = self._length):
        return length*2
如您所见,我试图在
tweep()
的参数中引用
self.\u length
。但是Python不喜欢这样。我得到
名称错误:未定义名称“self”


有没有一种好方法可以像这样分配一个默认值并得到我想要的结果?

您不能使用实例属性作为方法的默认参数。方法及其默认参数值是在定义类时定义的,但实例属性直到稍后实例化类时才存在

你必须做到:

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

谢谢这是有道理的。我希望我甚至不必添加两行代码,但我认为这可能是最好的方法。如果您担心换行的保护,可以使用:
返回长度不是None和length或self。\u length
。这将为我们剩下的人留下更多的换行信息!或者只是使用一个经典的Mac,尽你的力量控制CRs的过度数量,而不是助长LFs的过度捕捞。