我需要调用继承的类来获取它的内容和方法。但我也有一个类装饰器分配给我的包装类。我有很多包装类,希望它们尽可能短,这就是我试图让它工作的原因。
@add_properties
class Item01Object(BaseItemObject):
properties=["quantum","size","mass"]
def __init__(self, name=None):
super(Item01Object, self).__init__(name)
#[...]
@add_properties
class Item02Object(BaseItemObject):
#[...]
但是当我上课时,我收到以下错误:
File "C:\wrapper.py", line 862, in __init__
super(Item01Object, self).__init__(name)
NameError: global name 'Item01Object' is not defined
这个想法:
properties
BaseItemObject
我怎么能让它发挥作用?
感谢。
答案 0 :(得分:0)
行。我解决了这是一个非常简单的错误。在add_properties
我返回了我的类的对象,但它需要返回类本身。所以我的构造函数在我的类完全构建之前被执行了。所以我只是将其更改为以下内容并且工作正常:
def add_properties( ItemObject ):
for propName, cls in PropertyContainer.__dict__.iteritems():
if propName in ItemObject.properties:
setattr(ItemObject, propName, cls.__dict__[propName])
return ItemObject # <- Do not return an object!!
这是我第一次在复杂的结构中使用很多装饰器,但我真的很喜欢这个想法和结构。