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
参数显式而非隐式的原因是什么?
这是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)
我鼓励你阅读本文的其余部分.这很有意思.