我通过运行文本文件并将单词切成列表来创建类实例,我使用空格作为分割点.
然后,我使用这段代码基于数组中的名称创建类Word的对象.
exec("%s = Word(title)" % (title))
Run Code Online (Sandbox Code Playgroud)
我知道正在创建对象,因为我在初始化时打印了对象.
我的问题是,如果我尝试访问这些对象,我得到:
blue.getWordName()
NameError: global name 'blue' is not defined
Run Code Online (Sandbox Code Playgroud)
我真的很困惑,并试图寻找答案,但我不确定我使用的是正确的术语.
我已经发现我可以使用字典来实现我的目标,但我真的想更多地理解类实例.
是否有法律禁止从列表项中动态创建类?
我确实尝试包含所有代码,但它不会让我这样我会包含我认为最相关的内容:
class Word():
def __init__(self, name):
print 'You have just created me and I\'m called ' + name
self.name = name
if count > 0 and wordArray[count - 1] == 'is':
title = wordArray[count]
if title not in checkKeyWords():
exec("%s = Word(title)" % (title)) #set class from list item.
if word in verbArray:
exec("%s.setWordType('verb')" % (title))
Run Code Online (Sandbox Code Playgroud)
最后我调用已创建并拼写正确的下面的函数,我也确保'蓝色'肯定在列表中.
blue.getWordName()
Run Code Online (Sandbox Code Playgroud)
不要这样做.解决这个问题exec是一个非常糟糕的工具.更好的方法是例如:
words = {}
if count > 0 and wordArray[count - 1] == 'is':
title = wordArray[count]
if title not in checkKeyWords():
words[title] = Word(title)
if word in verbArray:
words[title].setWordType('verb')
Run Code Online (Sandbox Code Playgroud)
然后你会做这样的最后检查:
words["blue"].getWordName()
Run Code Online (Sandbox Code Playgroud)