2012-03-24 2 views
0

Ich habe eine Data-Klasse mit einem Feld, Preis. Ich referenzierte das Preisfeld in einer anderen Klasse Store. Wie sollte es getan werden, so dass Shop sehen Änderung zum Preis gemacht? Hier ist die Situation in Code.Ändern eines numpy-Arrays in-place oder wie man einen Verweis auf ein zu aktualisierendes Array erhält

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] 

Der einzige Weg, den ich finde, ist es, Preis zu referenzieren.

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] 

Aber ich möchte eine 'automatische' Möglichkeit, die Felder zu synchronisieren. Ich bin neu bei Python und mir sind die Scoping-Regeln nicht klar. Danke für jede Hilfe.

Antwort

2

Die einfachste Lösung dieses Problems ist nicht zu replizieren price in Store Instanzen - einfach self.data.price überall verwenden.

Wenn dies aus irgendeinem Grund nicht möglich ist, können Sie eine Eigenschaft definieren:

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

diese Weise die data Eigenschaft Store Instanzen immer den aktuellen Wert von self.data.price zurückzukehren.

+0

Vielen Dank, sehr klare Antwort. –

Verwandte Themen