5

我已经阅读了关于“自我”的 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

替换selfnum是相同的功能结果;IE:

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__etc 这样的习语,我可以在这里看到为什么self在第一种情况下使用。我self在程序函数的其他地方也看到了这种用法,并且发现它令人困惑。

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

4

2 回答 2

6

在示例中 bit_length 被定义为 int 类的函数,因此实际上有一个“类或方法”。这个想法是你“要求”一个整数来给出它的 bit_length,因此它被定义为将 self 作为参数。

于 2010-11-22T21:09:00.777 回答
4

没有真正的原因。但是,如果您要将其修补到现有的类上,那么它对于可能正在阅读代码的任何人来说都是一个通知。

于 2010-11-22T21:06:41.487 回答