NameError: global name not defined when calling method inside class

NameError: global name not defined when calling method inside class

我试图从我的主函数调用同一个 class 中的另一个函数,我似乎可以找出错误所在。

我不断收到与未定义函数相关的错误,我不确定如何解决它:

NameError: global name 'results' is not defined

class Darts:
     def main() :
          print results()

     def results() :
          round_result_totals = "Stuff"
          return round_result_totals

    #RUNNING CODE
    main()

您需要将 self(对象的实例)传递给对象的方法。

class Darts:
     def main(self) :
          print self.results()

     def results(self) :
          round_result_totals = "Stuff"
          return round_result_totals

您在 class 中缺少对 self 的所有必需引用。它应该是这样的:

class Darts:
    def main(self) :
        print self.results()

    def results(self) :
        round_result_totals = "Stuff"
        return round_result_totals

此处Python documentation on classes. And the fifth paragraph of this section参考了self的约定。

简而言之:Python class 的方法的第一个参数自动传递给调用该方法的 class 实例的引用(前提是它被称为实例方法)。这是由 Python 的解释器自动完成的。然而,这个参数仍然需要在方法定义中显式声明,约定是称它为self.

确保您在函数中正确定义 self 并在执行任何其他操作之前先 初始化 一个对象。您不能只从 class 调用 function 而无需创建 classinstance 并从 instance 调用 function (不是 CLASS)。通常你想在你的 python 类.

中有一个 __init__
class Darts:
     def __init__(self):
         pass

     def main(self):
          print(self.results())

     def results(self):
          round_result_totals = "Stuff"
          return round_result_totals

Dart1 = Darts()
Dart1.main()

如果要使用变量,self对于封装也很关键。

class Darts:
     def __init__(self):
         self.a = 500

     def main(self):
          self.a += 1
          print(self.a)


Dart1 = Darts()
Dart1.main()