2017-02-03 4 views
0

Mixinを使用して他のクラスを継続的に流れるデータを取得して関連付けることなくデータにアクセスできる方法を教えてくださいそれは私のすべてのクラス/オブジェクト内のクラスのインスタンスからですか?Python 2.7 Class Mixinから変数を取得し、Mixinの変数を変更する方法

class DataMixin(object): 
    data = {} 

    def change_data(self, data=None): 
    """ 
    HERE I AM TRYING TO ASSIGN data TO THE MIXIN ITSELF SO ALL CLASSES 
    USING THIS MIXIN RECEIVE THE SAME UPDATED data FIELD 
    """ 
    super(DataMixin, self).data = data 


dm = DataMixin() 

# EDIT. Moved Below line lower. 
# dm.change_data(data={'new': 'data'}) 


class Class1(DataMixin, object): 
    def __init__(self): 
    self.data = super(Class1, self).data 


class Class2(DataMixin, object): 
    def __init__(self): 
    self.data = super(Class2, self).data 


c1 = Class1() 
c2 = Class2() 

# EDIT. MOVED TO HERE. 
dm.change_data(data={'new': 'data'}) 

print "c1: {}".format(c1.data) 
print "c2: {}".format(c2.data) 

上記コード印刷:

C1:{}

C2:{}

私はそれを印刷する:

C1:{ '新': 'データ'}

C2:{ '新': 'データ'}

ミックスインを使用して、上記行うための方法はありますか? "OR" これをより良い方法で実行する必要がありますか?より良い方法で実施すべきかどうかを説明してください。 DMはクラスDataMixinとC1のインスタンスであるためです

乾杯...

答えて

0

は、c2はインスタンスからのデータ値を継承することはできません。 c1が必要な場合、c2は親クラスDataMixinから属性 'data'を継承します。このようにclass_ethodをclassmethodとすることができます

@classmethod 
    def change_data(self, data=None): 
    """ 
    HERE I AM TRYING TO ASSIGN data TO THE MIXIN ITSELF SO ALL CLASSES 
    USING THIS MIXIN RECEIVE THE SAME UPDATED data FIELD 
    """ 
    self.data = data 
関連する問題