4

我有这样的事情:

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

4 回答 4

4

您需要创建该类的一个实例,即一个活动对象,以使事情正常进行:

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()
于 2013-04-14T12:07:02.740 回答
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 教程中关于类的文档。

于 2013-04-14T12:14:45.230 回答
1

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

callDefDoSomething中,您使用

exampleClass.doSomething(5)

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

self.doSomething(5)

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

于 2013-04-14T12:04:47.590 回答
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()
于 2013-04-14T12:42:07.487 回答