Python'自我'的功能

daw*_*awg 5 python idioms self

我已经阅读了关于'self'解释的SO帖子,我已经阅读了关于类的Python文档.我想我理解selfPython类中的用法及其中的约定.

但是,对于Python及其成语相对较新,我无法理解为什么有些用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
Run Code Online (Sandbox Code Playgroud)

更换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
Run Code Online (Sandbox Code Playgroud)

没有像__init__我这样的成语,这里为什么self在第一种情况下被使用.我已经self在程序功能中看到了其他地方的使用,并且发现它令人困惑.

所以我的问题是:如果没有类或方法,为什么要使用self函数定义而不是描述性参数名?

Luc*_*ops 6

在示例中,bit_length被定义为int类的函数,因此实际上存在"类或方法".这个想法是你'要'一个整数给它的bit_length,因此它被定义为将self作为参数.

  • 换句话说,文档显示了一个`int`方法的等效(但效率低)实现,这就是它使用`self`的原因. (2认同)