【问题标题】:Why always add self as first argument to class methods? [duplicate]为什么总是将 self 作为第一个参数添加到类方法? [复制]
【发布时间】:2012-10-04 15:23:45
【问题描述】:

可能重复:
Why do you need explicitly have the “self” argument into a Python method?

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

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

【问题讨论】:

  • 请注意,术语 类方法 的含义与您所认为的不同。 method 是类拥有的函数,作用于实例 - class method 是类拥有的方法,作用于类。您说的是前者(按惯例采用self)而不是后者(按惯例采用cls)。
  • 超级有用的回复大家,谢谢!

标签: python class methods class-method


【解决方案1】:

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

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

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

    @classmethod
    def aclassmethod(cls):
        pass

    @staticmethod
    def astaticmethod():
        pass

【讨论】:

  • 我认为 因为显式优于隐式 过于简单化了。
  • @Lattyware:我或许应该解释得更多,但 显式优于隐式 是 Python 哲学的核心。
  • 非常重要,这是很重要的一点,我只想说 Python 的工作方式还有很多(而且更重要)的原因。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 2015-09-30
    • 1970-01-01
    • 2020-09-20
    相关资源
    最近更新 更多