在Python中的对象之间进行通信

时间:2013-04-14 11:58:26

标签: python class object function

我有这样的事情:

class exampleClass(object):

    def doSomething(self,number):
        return number + 1

class exampleClass2(exampleClass):
    def callDefDoSomething(self):
        print exampleClass.doSomething(5)

exampleClass2.callDefDoSomething()

-

TypeError: unbound method callDefDoSomething() must be called
with exampleClass2 instance as first argument (got nothing instead)

我开始在Python中学习对象,但我无法找到解决方案:(

4 个答案:

答案 0 :(得分:2)

您需要创建一个类的实例,即一个活动对象,以使工作正常:

class exampleClass(object):

    def doSomething(self,number):
        return number + 1 

class exampleClass2(exampleClass):

    def __init__(self):
        self.member1 = exampleClass()

    def callDefDoSomething(self):
        print self.member1.doSomething(5)


object2 = exampleClass2()
object2.callDefDoSomething()

答案 1 :(得分:1)

只能为不是类的实例调用常规类方法。所以,如果你想调用callDefDoSomething,你必须首先实例化exampleClass2。您还必须在callDefDoSomething调用中实例化exampleClass。

class exampleClass(object):

    def doSomething(self,number):
        return number + 1

class exampleClass2(exampleClass):
    def callDefDoSomething(self):
        exampleClassInstance = exampleClass()
        print exampleClassInstance.doSomething(5)

exampleClass2Instance = exampleClass2()

exampleClass2Instance.callDefDoSomething()

如果你想在类上调用方法,你应该尝试classmethods。查看python教程中classes的文档。

答案 2 :(得分:1)

您可以使用:

class exampleClass(object):
    def doSomething(self,number):
        return number + 1

class exampleClass2(exampleClass):
    def callDefDoSomething(self):
        print super(exampleClass2,self).doSomething(5)

example = exampleClass2()
example.callDefDoSomething()

答案 3 :(得分:0)

doSomethingexampleClass的一种方法。因此,必须为此类的实例调用它。

callDefDoSomething中,您使用

exampleClass.doSomething(5)
但是,

exampleClass不是此类的实例,而是类本身。你想在这里使用的是

self.doSomething(5)

self指的是exampleClass2 , for which callDefDoSomethings is invoked, which, due to inheritance, is an instance of exampleClass`的实例。