2017-02-03 70 views
0

如何使用Mixin來獲取不斷變化的數據以流過其他類以便我可以訪問數據而不必關聯從我的所有類/對象中的類的實例中獲取它?Python 2.7類如何從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」 我是否需要更好地瞭解這一點?請說明是否應該以更好的方式完成。

乾杯......

回答

0

這是因爲DM是類DataMixin和C1的一個實例,C2不能繼承實例的數據值。如果你想c1,c2繼承父類DataMixin的屬性'data',你可以使函數change_data像這樣的類方法

@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