9

这是我的example.py文件:

from myimport import *
def main():
    myimport2 = myimport(10)
    myimport2.myExample() 

if __name__ == "__main__":
    main()

这是myimport.py文件:

class myClass:
    def __init__(self, number):
        self.number = number
    def myExample(self):
        result = myExample2(self.number) - self.number
        print(result)
    def myExample2(num):
        return num*num

当我运行example.py文件时,出现以下错误:

NameError: global name 'myExample2' is not defined

我该如何解决?

4

5 回答 5

11

这是对您的代码的简单修复。

from myimport import myClass #import the class you needed

def main():
    myClassInstance = myClass(10) #Create an instance of that class
    myClassInstance.myExample() 

if __name__ == "__main__":
    main()

myimport.py

class myClass:
    def __init__(self, number):
        self.number = number
    def myExample(self):
        result = self.myExample2(self.number) - self.number
        print(result)
    def myExample2(self, num): #the instance object is always needed 
        #as the first argument in a class method
        return num*num
于 2013-11-15T10:02:12.530 回答
9

我在您的代码中看到两个错误:

  1. 你需要打电话myExample2self.myExample2(...)
  2. self定义myExample2时需要添加:def myExample2(self, num): ...
于 2013-11-15T09:56:29.503 回答
1

首先,我同意 alKid 的回答。这实际上更像是对问题的评论而不是答案,但我没有评论的声誉。

我的评论:

导致错误的全局名称myImport不是myExample2

解释:

我的 Python 2.7 生成的完整错误消息是:

Message File Name   Line    Position    
Traceback               
    <module>    C:\xxx\example.py   7       
    main    C:\xxx\example.py   3       
NameError: global name 'myimport' is not defined

当我试图在我自己的代码中追踪一个晦涩的“未定义全局名称”错误时,我发现了这个问题。因为问题中的错误信息不正确,我最终更加困惑。当我实际运行代码并看到实际错误时,一切都说得通了。

我希望这可以防止任何找到此线程的人遇到与我相同的问题。如果有比我更有名气的人想把它变成评论或解决问题,请随意。

于 2016-02-13T17:24:26.763 回答
0

虽然其他答案是正确的,但我想知道是否真的需要myExample2()成为一种方法。您也可以独立实现它:

def myExample2(num):
    return num*num

class myClass:
    def __init__(self, number):
        self.number = number
    def myExample(self):
        result = myExample2(self.number) - self.number
        print(result)

或者,如果你想保持你的命名空间干净,把它实现为一个方法,但因为它不需要self,作为一个@staticmethod

def myExample2(num):
    return num*num

class myClass:
    def __init__(self, number):
        self.number = number
    def myExample(self):
        result = self.myExample2(self.number) - self.number
        print(result)
    @staticmethod
    def myExample2(num):
        return num*num
于 2013-11-15T10:05:46.457 回答
0

您必须创建myClass类的实例,而不是整个模块的实例(并且我编辑变量名称以使其不那么糟糕):

from myimport import *
def main():
    #myobj = myimport.myClass(10)
    # the next string is similar to above, you can do both ways
    myobj = myClass(10)
    myobj.myExample() 

if __name__ == "__main__":
    main()
于 2013-11-15T09:59:17.277 回答