2017-02-03 65 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