代码之家  ›  专栏  ›  技术社区  ›  dawg

函数的Python“self”

  •  4
  • dawg  · 技术社区  · 14 年前

    我读过 the SO post 关于“self”的解释,我读过 Python documentation 上课的时候。我想我明白 self 在Python类和其中的约定中。

    但是,由于对Python及其习惯用法还比较陌生,我无法理解为什么有些 自己 在过程类型函数定义中。例如,在 Python documentation on integer types ,示例函数为:

    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
    

    更换 自己 具有 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__ 等等,我可以在这里看到为什么 自己 在第一个案例中使用。我见过这种用法 自己 其他地方的程序功能,以及发现它令人困惑。

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

    2 回复  |  直到 7 年前
        1
  •  6
  •   Lucas Moeskops    14 年前

    在示例中,位长度被定义为int类的函数,因此实际上有一个“类或方法”。其思想是“要求”一个整数给出它的位长度,因此它被定义为以self作为参数。

        2
  •  4
  •   Ignacio Vazquez-Abrams    14 年前

    没有真正的原因。但是如果您要将它重新编译到一个现有类上,那么它对任何可能正在读取代码的人起到一点通知的作用。