【问题标题】:NameError: global name not defined when calling method inside classNameError:在类内调用方法时未定义全局名称
【发布时间】:2015-04-27 03:50:07
【问题描述】:

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

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

NameError:未定义全局名称“结果”

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

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

    #RUNNING CODE
    main()

【问题讨论】:

  • 实际调用函数的代码会很有帮助。
  • updated 只是简单地调用 main()

标签: function python-2.7 runtime-error


【解决方案1】:

确保在函数中正确定义self,并在执行任何其他操作之前先初始化对象。你不能只从class 调用function 而不创建classinstance 并从instance 调用function(不是类)。通常你希望在你的 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()

【讨论】:

  • 如果您在 init 函数中为类创建了一些变量并需要在 main 函数中引用它们,这将如何工作。所以说你有: init 类中的 a = 500 并且需要在主类中使用 'a' 来增加它。 "a += 1"
  • 非常感谢!我一直在尝试自学 python,这对阅读您的回复和您提供的链接非常有帮助!
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    class Darts:
        def main(self) :
            print self.results()
    
        def results(self) :
            round_result_totals = "Stuff"
            return round_result_totals
    

    这里是Python documentation on classes。而this section的第五段引用了self的约定。

    简而言之:Python 类的方法的第一个参数会自动传递给调用该方法的类的实例的引用(前提是它被作为实例方法调用)。这是由 Python 的解释器自动完成的。不过这个参数还是需要在方法定义中明确说明,约定叫self

    【讨论】:

      猜你喜欢
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 2014-10-24
      • 2012-05-29
      • 2013-08-23
      • 2014-04-03
      相关资源
      最近更新 更多