我遇到以下代码问题,它说“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()
答案 0 :(得分:1)
在课程定义期间调用readData()
。在Python中,类正文在类定义的上下文中定义时就像普通代码一样执行。由于此时尚未完全定义类,因此无法创建新实例,从而获得错误。
Dedent 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才能正确地缩进代码,因为它定义了块范围。