为什么self只是一个约定而不是一个真正的Python关键字?

Ter*_*nce 9 python

据我所知,self只是一个非常强大的约定,它在Python中并不是真正的保留关键字.Java和C#将此作为关键字.我觉得奇怪的是他们没有在Python中为它创建一个保留关键字.这背后有什么理由吗?

Tim*_*ney 5

因为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() # 没有传递参数


Arl*_*ren 2

Guido van Rossum 在博客中阐述了为什么显式自我必须保留:http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html

我相信这篇文章提供了一些关于显性自我背后的设计决策的见解。

  • 那不是问的。问题不是“为什么我需要输入 self”,而是“为什么 self 只是一个约定而不是关键字”。如果你真的想要的话,可以有 `def foo(this):` - 我相信他是在问为什么称它为 `self` 不是强迫你的。 (6认同)