Python:按实例对象调用方法:“缺少1个必需的位置参数:'self'”

时间:2013-11-16 21:15:02

标签: python class methods instance

我是Python的新手。我写了两个类,第二个有第一个的实例作为成员变量。现在我想通过类1中的实例调用Class2的方法。我找不到答案。像这样:

class Class1:
    def uselessmethod(self):
        pass

class Class2:
    def __init__(self):
        self.c = Class1()

    def call_uselessmethod(self):
        self.c.uselessmethod()

k = Class2
k.call_uselessmethod() # Error!

给出以下错误:

k.call_uselessmethod() #Error
TypeError: call_uselessmethod() missing 1 required positional argument: 'self'

知道这里发生了什么?提前谢谢。

3 个答案:

答案 0 :(得分:2)

call_uselessmethod要求在使用之前首先有Class2的实例。但是,通过这样做:

k = Class2

您没有将k分配给Class2的实例,而是Class2本身。

要创建Class2的实例,请在类名后添加()

k = Class2()
k.call_uselessmethod()

现在,您的代码将起作用,因为k指向Class2的实例。

答案 1 :(得分:1)

要创建实例,您需要调用k = Class2()

k = Class2为类创建了一个别名,而 k.call_uselessmethod``创建了一个非绑定方法,要求您将该实例作为参数传入。

这是一个准确解释发生了什么的会话:

>>> k = Class2      # create an alias the Class2
>>> k == Class2     # verify that *k* and *Class2* are the same
True
>>> k.call_uselessmethod   # create an unbound method
<unbound method Class2.call_uselessmethod>
>>> k.call_uselessmethod() # call the unbound method with the wrong arguments

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    k.call_uselessmethod() # call the unbound method with the wrong arguments
TypeError: unbound method call_uselessmethod() must be called with Class2 instance as first argument (got nothing instead)

注意,Python2.7.6中的错误消息已经改进了你所看到的: - )

答案 2 :(得分:0)

声明:

k = Class2

实际上是将变量k分配给本身,这是一个type对象。请记住,在Python 中,所有都是一个对象:类只是type个对象。

>>> class Class2: pass
...
>>> k = Class2
>>> type(k)
>>> <class 'type'>

您想要的是Class2实例。为此,你必须调用Class2的构造函数:

k = Class2()