如果我有课。。。
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告诉我我给了它两个参数,而我只给了一个?
当您不指定
__init__()
或任何其他要查找的方法的参数数时,就会发生这种情况。例如:
运行上述程序时,会出现这样的错误:
我们怎样才能摆脱这件事?
只需传递参数,什么
__init__()
方法寻找在Python中,这个:
。。。是syntactic sugar,解释器在幕后将其翻译为:
。。。正如你所看到的,它确实有两个参数——从调用者的角度来看,第一个参数是隐式的。
这是因为大多数方法对它们被调用的对象做一些工作,所以需要有某种方法才能在方法内部引用该对象。按照惯例,第一个参数在方法定义中称为
self
:如果对
MyNewClass
的实例调用method("foo")
,它将按预期工作:有时(但不是经常),您真的不关心方法绑定到的对象,在这种情况下,您可以使用内置函数decorate方法这样说:
。。。在这种情况下,您不需要向方法定义添加
self
参数,它仍然可以工作:遇到此类错误时需要考虑的其他事项:
我遇到这个错误信息,发现这篇文章很有帮助。在我的例子中,我重写了一个存在对象继承的init。
继承的示例相当长,因此我将跳到一个不使用继承的更简单的示例:
结果是:
PyCharm没有注意到这个错误。Notepad++也没有(其他编辑器/IDE也有可能)。
当然,这是一个“不接受任何参数”的TypeError,就Python中的对象初始化而言,它与期望值为1时的“got two”没有太大区别。
解决这个问题:如果语法正确,将使用重载初始值设定项,但如果不正确,则将忽略该初始值设定项,而使用内置的初始值设定项。对象将不期望/处理此操作,并引发错误。
在sytax错误的情况下:修复很简单,只需编辑自定义init语句:
相关问题 更多 >
编程相关推荐