27

可能重复:
为什么需要在 Python 方法中显式添加“self”参数?

我理解为什么 self总是类方法的第一个参数,这是完全有道理的,但如果总是这样,那么为什么要为每个方法定义都输入 if 的麻烦呢?为什么不让它在幕后自动完成呢?

是为了清楚起见,还是在某些情况下您可能不想将 self 作为第一个参数传递?

4

2 回答 2

36

因为显式优于隐式。通过使参数成为显式要求,您可以简化代码理解、内省和操作。它在Python FAQ中进一步扩展。

此外,您可以定义类方法(将类而不是实例作为第一个参数),您可以定义静态方法(根本不采用“第一个”参数):

class Foo(object):
    def aninstancemethod(self):
        pass

    @classmethod
    def aclassmethod(cls):
        pass

    @staticmethod
    def astaticmethod():
        pass
于 2012-10-14T12:44:07.763 回答
17

Guido在这里解释了这一点。基本上,方法就是函数,函数不应该接受任何“隐藏”的参数,否则像装饰器这样的高阶设施将无法以合理的方式处理它们。

于 2012-10-14T12:46:23.770 回答