据我所知,self只是一个非常强大的约定,它在Python中并不是真正的保留关键字.Java和C#将此作为关键字.我觉得奇怪的是他们没有在Python中为它创建一个保留关键字.这背后有什么理由吗?
因为self只是函数的参数,就像任何其他参数一样。例如,以下调用:
a = A() 斧头()
基本上被转换为:
a = A() 斧头(一)
不self使用保留字也有幸运的结果,对于类方法,您可以将第一个参数重命名为其他名称(通常为cls)。当然,对于静态方法,第一个参数与调用它的实例没有关系,例如:
A类:
定义方法(自我):
经过
@类方法
def class_method(cls):
经过
@静态方法
def static_method():
经过
B(A)类:
经过
b = B()
b.method() # self 是 b
b.class_method() # cls 是 B
b.static_method() # 没有传递参数
Guido van Rossum 在博客中阐述了为什么显式自我必须保留:http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html
我相信这篇文章提供了一些关于显性自我背后的设计决策的见解。