即使我知道它已被创建,也无法访问对象?

0 python class object

我通过运行文本文件并将单词切成列表来创建类实例,我使用空格作为分割点.

然后,我使用这段代码基于数组中的名称创建类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)

orl*_*rlp 6

不要这样做.解决这个问题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)