Модификация массива numpy на месте или как получить ссылку на массив numpy для обновления - PullRequest
0 голосов
/ 24 марта 2012

У меня есть класс данных с одним полем, цена.Я ссылался на поле цены в магазине другого класса.Как это сделать, чтобы магазин видел изменения, внесенные в цену?Вот ситуация в коде.

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 Ответ

2 голосов
/ 24 марта 2012

Самое простое решение этой проблемы - не копировать price в Store экземплярах - просто использовать self.data.price везде.

Если по какой-либо причине это не вариант, вы можете определить свойство:

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

Таким образом, свойство data экземпляров Store всегда будет возвращать текущее значение self.data.price.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...