为什么Python会自我明确?

7 python

为什么Python self在每个参数列表中都需要一个显式参数?

例如,在文档中给出的类Complex中

class Complex: 

    def __init__(self, realpart, imagpart):
        self.r = realpart
        self.i = imagpart

    def conjugate(self):
        self.i = -self.i


x = Complex(3.0, -4.5) # 2 instead of 3?
x.conjugate()          # No parameters?
Run Code Online (Sandbox Code Playgroud)

我最初发现它非常令人困惑,__init__( )似乎需要3个参数,但你Complex( )只用2个调用.

self参数显式而非隐式的原因是什么?

pha*_*t0m 7

是GvR关于此事的一篇好文章.它讨论了为什么显式self引用仍然存在.

他带来的积分:

加强了等效性

foo.meth(arg) == C.meth(foo, arg)
Run Code Online (Sandbox Code Playgroud)

能够将方法动态附加到类,然后可以从该类的所有新对象和现有对象中使用它们:

def meth(myself, arg):
   myself.val = arg
   return myself.val

# Poke the method into the class:
C.meth = meth
Run Code Online (Sandbox Code Playgroud)

我鼓励你阅读本文的其余部分.这很有意思.

  • `foo.meth(arg) == C.meth(foo, arg)` 哪里需要这个? (2认同)
  • @DarekNędza如下一段所述,只需将一个带有self参数的函数添加到类`C.newMethod = some_function_with_self`中,就可以向类的所有对象添加其他方法. (2认同)

Jak*_* S. 1

关于“self”参数:它标识某个类的实例。例如,在 C++ 中,完成了完全相同的事情 - 但在幕后。

进一步阅读:http://linuxgazette.net/issue56/orr.html