如果我有课…
class MyClass:
def method(arg):
print(arg)
…我用它来创建一个对象…
my_object = MyClass()
…我打电话给 method("foo")
就像这样…
>>> my_object.method("foo")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: method() takes exactly 1 positional argument (2 given)
…为什么 Python 告诉我我给了它两个参数,而我只给了一个?
原文由 Zero Piraeus 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Python 中,这个:
…是 语法糖,解释器在幕后将其翻译成:
…如您所见,它确实有两个参数——只是从调用者的角度来看,第一个参数是隐式的。
这是因为大多数方法都会对调用它们的对象进行一些处理,因此需要某种方式在方法内部引用该对象。按照惯例,第一个参数在方法定义中称为
self
:如果您在
method("foo")
MyNewClass
,它会按预期工作:偶尔(但不经常),你真的 不 关心你的方法绑定到的对象,在那种情况下,你可以用内置的
staticmethod()
函数 装饰 方法来这样说:…在这种情况下,您不需要在方法定义中添加
self
参数,它仍然有效: