PYTHON中没有定义name

  • 本文关键字:定义 name PYTHON python
  • 更新时间 :
  • 英文 :


我有以下代码的问题,它说"NameError:全局名称'Teater'未定义"我不能自己解决它…

teaterLista = []
lista = []
class Teater:

    def __init__(self, teaterNamn, plats, pensionar,vuxen,barn):
        self.teaterNamn = teaterNamn
        self.plats = plats
        self.pensionar = pensionar
        self.vuxen = vuxen
        self.barn = barn
    def readData():
        #x = Teater(x,teaterNamn, plats,pensionar,vuxen,barn)
        dataFile = open('c:/Teater.txt','r')
        for line in dataFile:
            if(line != 'n'):
                  temp = line.split('=',1)[1]
                  lista.append(temp.strip()) #strip tar bort radavslut
        x = Teater(x,lista[0],lista[1],lista[2],lista[3],lista[4])
    #teaterLista[0] = x
    #print(teaterLista[0])
    readData()

在类定义期间调用readData()。在Python中,类主体在其定义期间在类定义的上下文中执行,就像普通代码一样。由于此时类还没有完全定义,因此您还不能创建一个新的实例,因此会得到错误。

依赖readData的整个定义和下面的行,以便在类的定义完成后执行。这使得readLine成为模块级函数,而不是类方法。这是典型的工厂函数。

teaterLista = []
lista = []
class Teater:
    def __init__(self, teaterNamn, plats, pensionar,vuxen,barn):
        self.teaterNamn = teaterNamn
        self.plats = plats
        self.pensionar = pensionar
        self.vuxen = vuxen
        self.barn = barn
def readData():
    #x = Teater(x,teaterNamn, plats,pensionar,vuxen,barn)
    dataFile = open('c:/Teater.txt','r')
    for line in dataFile:
        if(line != 'n'):
              temp = line.split('=',1)[1]
              lista.append(temp.strip()) #strip tar bort radavslut
    x = Teater(lista[0],lista[1],lista[2],lista[3],lista[4])
#teaterLista[0] = x
#print(teaterLista[0])
readData()

注意:x = Teater(x, ...将不起作用,因为x没有为第一次调用定义。如果您考虑为self参数指定此:不需要;这是隐式完成的。你应该在文档/教程中阅读类是如何工作的。

在Python中,你必须小心正确地缩进你的代码,因为这定义了块范围。

最新更新