Python 函数中的 'self

5 投票
2 回答
4142 浏览
提问于 2025-04-16 07:28

我看过关于“self”的解释帖子,也读过Python的类相关文档。我觉得我明白在Python类中怎么用self以及它的用法规范。

不过,作为一个相对新手,我不太明白为什么有些人在普通函数定义中也用self。比如,在关于整数类型的Python文档中,示例函数是:

def bit_length(self):
    s = bin(self)       # binary representation:  bin(-37) --> '-0b100101'
    s = s.lstrip('-0b') # remove leading zeros and minus sign
    return len(s)       # len('100101') --> 6

self换成num,功能上是一样的;也就是说:

def bit_length(num):
    s = bin(num)       # binary representation:  bin(-37) --> '-0b100101'
    s = s.lstrip('-0b') # remove leading zeros and minus sign
    return len(s)       # len('100101') --> 6

在这里我看不出有什么像__init__这样的习惯用法,为什么在第一个例子中要用self。我在其他普通函数中也见过这种用法,觉得很困惑。

所以我的问题是:如果没有类或方法,为什么在函数定义中用self而不是一个更能描述的参数名呢?

2 个回答

4

其实没有特别的理由。不过,如果你要把它加到一个已经存在的类上,这样做就像是在给可能阅读这段代码的人发个小通知。

6

在这个例子中,bit_length 是为整数类(int)定义的一个函数,所以它实际上是一个“类或方法”。这里的意思是,你可以“请求”一个整数来告诉你它的位数长度,因此它被定义为接受自身(self)作为参数。

撰写回答