Python:当类本身有一个decorator时,如何调用super?

2024-10-03 11:22:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要调用继承的类来让它的内容和方法正常工作。但我也为我的包装类分配了一个类装饰器。我有很多包装类,希望它们尽可能短,这就是为什么我试图让它发挥作用。在

@add_properties
class Item01Object(BaseItemObject):
    properties=["quantum","size","mass"]

    def __init__(self, name=None):
        super(Item01Object, self).__init__(name)

    #[...]

@add_properties
class Item02Object(BaseItemObject):
    #[...]

但是当我实例化我的类时,我得到以下错误:

^{pr2}$

想法是:

  1. 使用类变量properties快速编辑每个“包装器”项的属性
  2. BaseItemObject给出的基本功能
  3. 方法很容易被覆盖
  4. 简短的包装类有一个很好的概述

我怎么能让它工作??在

谢谢。在


Tags: 方法nameselfadd内容sizeinit装饰
1条回答
网友
1楼 · 发布于 2024-10-03 11:22:21

好吧。我解决了。只是个很简单的错误。在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!!

这是我第一次在一个复杂的结构中使用很多装饰器,但我真的很喜欢它的想法和结构。在

相关问题 更多 >