有人可以解释我收到错误的原因:
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”的方法
答案 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
方法可能A
和self
参数错过了
在这种情况下,可以按如下方式调用此方法:
self.helloWorld()
或
A.helloWorld(self)