处理python中的类继承

时间:2013-10-31 22:01:19

标签: python inheritance

有人可以解释我收到错误的原因:

global name 'helloWorld' is not defined
执行以下操作时

class A:
    def helloWorld():
        print 'hello world'

class B(A):
    def displayHelloWorld(self):
        helloWorld()

class Main:
     def main:
        b = B()
        b.displayHelloWorld()

我已经习惯了java,其中B类显然会有一个A类方法“helloWorld”的副本,因此这个代码在执行main时运行正常。然而,这似乎认为B类没有任何称为“helloWorld”的方法

3 个答案:

答案 0 :(得分:6)

在helloWorld()之前缺少自我。 self关键字表示这是一个实例函数或变量。当B类继承A类时,现在可以使用self.classAfunction()访问A类中的所有函数,就好像它们是在B类中实现一样。

class A():
    def helloWorld(self): # <= missing a self here too
        print 'hello world'

class B(A):
    def displayHelloWorld(self):
        self.helloWorld()

class Main():
     def main(self):
        b = B()
        b.displayHelloWorld()

答案 1 :(得分:1)

您需要指明该方法来自该类(self.):

class B(A):
    def displayHelloWorld(self):
        self.helloWorld()

Python与Java不同。您必须在Python中明确指定它,而Java也会隐式接受。

答案 2 :(得分:0)

我不知道这个例子中使用的python版本是什么,但似乎语法看起来像python3。 (print语句除外,它看起来像python2.x)

让我们假设这是python3

我会说helloWorld是类A的类方法,它应该被称为类属性。只要此函数在类命名空间中,就可以使用所有者类在此类外部访问它。

A.helloWorld()

B.helloWorld()

self.__class__.helloWorld()

在这种情况下,你不能将它称为绑定方法,因为self参数将被传递,并且一旦你的函数不期望它将会失败。

helloWorld方法可能Aself参数错过了

在这种情况下,可以按如下方式调用此方法:

self.helloWorld()

A.helloWorld(self)