为了账号安全,请及时绑定邮箱和手机立即绑定

TypeError:method()接受一个位置参数,但给出了2个

TypeError:method()接受一个位置参数,但给出了2个

哔哔one 2019-07-11 16:40:10
TypeError:method()接受一个位置参数,但给出了2个如果我有课.。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告诉我给了它两个论点,而我只给了一个呢?
查看完整描述

3 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

在Python中,这是:

my_object.method("foo")

..是句法糖,翻译在幕后将其翻译为:

MyClass.method(my_object, "foo")

..正如您所看到的,它确实有两个参数-从调用方的角度来看,第一个参数是隐式的。

这是因为大多数方法都对调用的对象做了一些工作,因此需要有某种方法来在方法中引用该对象。按照惯例,第一个参数称为self在方法定义中:

class MyNewClass:

    def method(self, arg):
        print(self)
        print(arg)

如果你打电话method("foo")关于…的一个例子MyNewClass,如预期的那样运作:

>>> my_new_object = MyNewClass()>>> my_new_object.method("foo")<__main__.MyNewClass object at 0x29045d0>foo

偶尔(但不经常),你真的关心方法绑定到的对象,在这种情况下,您可以装饰内建法staticmethod()职能是这样说的:

class MyOtherClass:

    @staticmethod
    def method(arg):
        print(arg)

..在这种情况下,不需要添加self方法定义的参数,它仍然有效:

>>> my_other_object = MyOtherClass()>>> my_other_object.method("foo")
foo


查看完整回答
反对 回复 2019-07-11
  • 3 回答
  • 0 关注
  • 1156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信