在可以在装饰方法中使用的对象之间共享属性

时间:2014-01-28 11:42:17

标签: python object decorator class-attributes

我有一组对象是同一个类的实例。我希望他们分享一个共同的属性。 好的,我可以简单地定义一个类属性:

MyClass():
    classattr = None

    def __init__(self):
        self.instattr = None

但是,我想使用相同的类创建另一组对象,并将common属性设置为除第一组之外的其他对象。

我在类中需要这个属性,所以我可以将方法装饰为属性,同时仍然在属性方法中使用该属性。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以将类属性设为字典;每个'组'实例都在该字典中给出了它自己的密钥:

class MyClass():
    classattr_groups = {'group1': None, 'group2': None}

整个对象仍然在实例之间共享,但是你可以使用其中一个键作为一组实例,另一个键用于第二组,等等。

另一种方法是子类;为每个组赋予自己的派生类和自己的类属性:

class MyClass():
    classattr = None


class MyClassGroup1(MyClass):
    classattr = 'group1'


class MyClassGroup2(MyClass):
    classattr = 'group2'