如何使两个类共享相同的属性?

时间:2015-08-30 17:43:53

标签: python

我已经定义了一个拥有属性score的类,这是一个矩阵。 让我们说var是这个类的一个实例。

我有另一个类需要访问矩阵var.score的一个特定单元格。我想做那样的事情:

class MyClass:
    def __init__(self, r, c):
        self.cell = var.score[r][c]
    ...
    # Then make operations on self.cell

除非修改self.cell,否则修改也应反映在var.score[r][c]上。创建self.cell而不是简单地使用var.score[r][c]的目的是为了清晰起见,并避免在以下类定义中拖动rc

我已经看过使用包装器可变对象的解决方案,例如列表并不令我满意。那么实现它的最佳解决方案是什么?

2 个答案:

答案 0 :(得分:3)

您可以使用属性:

class Foo(object):
    def __init__(self, r, c):
        self.r = r
        self.c = c

    @property
    def cell(self):
        return var[self.r][self.c]

    @cell.setter
    def cell(self, val):
        var[self.r][self.c] = val

然后:

>>> var = [[1, 2], [3, 4]]
>>> x = Foo(0, 1)
>>> x.cell
2
>>> x.cell = 8
>>> var
[[1, 8], [3, 4]]
>>> y = Foo(1, 1)
>>> y.cell = 88
>>> var
[[1, 8], [3, 88]]
>>> var[0][1] = "Hello"
>>> x.cell
'Hello'

答案 1 :(得分:1)

@BrenBarn解决方案是正确的。只是一个建议,你不应该像这样使用全局变量var。 var应该在初始化中传递给类。

class Foo(object):
    def __init__(self, r, c, var):
        self.r = r
        self.c = c
        self.var = var

    @property
        def cell(self):
        return self.var[self.r][self.c]

    @cell.setter
    def cell(self, val):
        self.var[self.r][self.c] = val

如果你想让整个班级保持一致,那么声明类变量同样准确。