我理解为什么 self总是类方法的第一个参数,这是完全有道理的,但如果总是这样,那么为什么要为每个方法定义都输入 if 的麻烦呢?为什么不让它在幕后自动完成呢?
是为了清楚起见,还是在某些情况下您可能不想将 self 作为第一个参数传递?
我理解为什么 self总是类方法的第一个参数,这是完全有道理的,但如果总是这样,那么为什么要为每个方法定义都输入 if 的麻烦呢?为什么不让它在幕后自动完成呢?
是为了清楚起见,还是在某些情况下您可能不想将 self 作为第一个参数传递?
因为显式优于隐式。通过使参数成为显式要求,您可以简化代码理解、内省和操作。它在Python FAQ中进一步扩展。
此外,您可以定义类方法(将类而不是实例作为第一个参数),您可以定义静态方法(根本不采用“第一个”参数):
class Foo(object):
def aninstancemethod(self):
pass
@classmethod
def aclassmethod(cls):
pass
@staticmethod
def astaticmethod():
pass
Guido在这里解释了这一点。基本上,方法就是函数,函数不应该接受任何“隐藏”的参数,否则像装饰器这样的高阶设施将无法以合理的方式处理它们。