Python2.7类如何从Mixin获取变量并在Mixin中更改变量

2024-09-30 08:17:18 发布

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

我该如何使用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: {'new': 'data'}

c2: {'new': 'data'}

有没有一种方法可以使用mixin来完成上述操作? “或” 我需要更好的方法吗?请解释一下是否应该做得更好。在

干杯。。。在


Tags: toselfnewdataobjectdefdmchange
1条回答
网友
1楼 · 发布于 2024-09-30 08:17:18

这是因为dm是DataMixin和c1类的实例,c2不能从实例继承数据值。如果你想要c1,c2从父类DataMixin继承属性'data',您可以像这样将函数更改为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

相关问题 更多 >

    热门问题