我有以下代码的问题,它说"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中,你必须小心正确地缩进你的代码,因为这定义了块范围。