在适当位置修改numpy数组或如何获取对要更新的numpy数组的引用

时间:2012-03-24 19:48:21

标签: python numpy

我有一个Data类,其中包含一个字段,价格。 我在另一个类Store中引用了price字段。 该怎么做才能使Store看到对价格的修改? 这是代码中的情况。

import numpy as np

class Data:
    def __init__(self):
        self.price=np.array([1,2,3])

    def increasePrice(self,increase):
        self.price=self.price*increase

class Store:
    def __init__(self):
        self.data=Data()
        self.price=self.data.price

    def updateData(self):
        self.data.increasePrice(2)
        print self.data.price #print [2,3,6]
        print self.price      #print [1,2,3]

我发现这样做的唯一方法是重新引用价格。

class Store:
    ....
    def updateData(self):
        self.data.increasePrice(2)
        self.price=self.data.price #re-referencing price
        print self.data.price #print [2,3,6]
        print self.price      #print [2,3,6]

但我希望采用更“自动”的方式来保持字段同步。 我是python的新手,我不清楚范围规则。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

此问题最简单的解决方法是不在price个实例中复制Store - 只需在任何地方使用self.data.price

如果出于某种原因这不是一个选项,您可以定义一个属性:

class Store(object):
    ...
    @property
    def price(self):
        return self.data.price

这样,data个实例的Store属性将始终返回self.data.price的当前值。