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

时间:2010-11-09 08:12:03

标签: python

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

3 个答案:

答案 0 :(得分:4)

Guido van Rossum发表了关于为什么要明确自我留下来的博客:http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html

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

答案 1 :(得分:3)

因为self只是函数的一个参数,就像任何其他参数一样。例如,以下调用:

a = A()
a.x()

基本上转换为:

a = A()
A.x(a)

不使self成为保留字也有幸的结果,对于类方法,您可以将第一个参数重命名为其他参数(通常为cls)。当然对于静态方法,第一个参数与它所调用的实例没有关系,例如:

class A:
    def method(self):
        pass

    @classmethod
    def class_method(cls):
        pass

    @staticmethod
    def static_method():
        pass

class B(A):
    pass

b = B()
b.method()        # self is b
b.class_method()  # cls is B
b.static_method() # no parameter passed

答案 2 :(得分:0)

因为方法只是第一个参数用于传递对象的函数。您可以编写如下方法:

class Foo(object):
    pass

def setx(self, x):
    self.x = x

Foo.setx = setx

foo = Foo()
foo.setx(42)
print foo.x    # Prints 42.

无论这种哲学的优点还是其他方面,它都会导致更加统一的功能和方法概念。