为什么总是将self作为类方法的第一个参数添加?

jon*_*opf 22 python methods class class-method

可能重复:
为什么需要在Python方法中明确地使用"self"参数?

我理解为什么self 始终是类方法的第一个参数,这是完全有道理的,但如果它总是如此,那么为什么要为每个方法定义经历打字的麻烦?为什么不在幕后自动完成?

是为了清楚还是在某种情况下你可能不想把自己作为第一个论点?

Mar*_*ers 34

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

此外,您可以定义类方法(将类而不是实例作为第一个参数),并且您可以定义静态方法(根本不要使用'first'参数):

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

    @classmethod
    def aclassmethod(cls):
        pass

    @staticmethod
    def astaticmethod():
        pass
Run Code Online (Sandbox Code Playgroud)

  • 我认为*因为明确比隐含更好*是过于简单化. (13认同)
  • @Lattyware:我也许应该解释得更多,但是在Python哲学的核心上,*显式要比隐式*好。 (4认同)

geo*_*org 15

圭多在这里解释说.基本上,方法是函数,函数不应该接受任何"隐藏"参数,否则高级设施(如装饰器)将无法以合理的方式处理它们.