如何向python类对象添加字典属性?

时间:2015-11-10 16:43:56

标签: python python-2.7 python-3.x nlp

我有一些我正在使用的代码(specifically Parsetron),它是为Python 2.7编写的,我正在尝试使用python 3.4运行,并且毫不奇怪它正在抛出错误。

我特别关注的错误是:

def __new__(cls):
    return cls.__dict__['_grammar_']

KeyError: '_grammar_'

cls是类对象,它确实没有键“_grammar_”。我的问题当然是如何摆脱这个错误以及它出现的原因。在python 2.7中,__dict__是否为类对象添加了键值,而Python 3.x则没有?在调试期间运行该线程似乎不会在任何地方添加此值。有谁知道发生了什么事?

1 个答案:

答案 0 :(得分:1)

查看代码,您可以看到Grammar._grammar_类属性实际上是set by the metaclass

dct["_grammar_"] = GrammarImpl(name, dct)

但是,Grammar uses the 2.x syntax用于设置元类:

__metaclass__ = MetaGrammar

要对Python 3.x进行调整,请使用new syntax

class Grammar(metaclass=MetaGrammar):