2016-03-06 296 views
-2

我主要進行與科學相關的編程,通常以非常連續的方式結束。當我需要複製類似的結構或通過函數傳遞許多參數時,我正試圖提高自己的編碼技能並使用OOP。到目前爲止,我做得很好,但最近我發現了一個問題。在類對象之間共享數據

想象一下,通過對SQL數據庫執行查詢,可以獲得大量信息。然後,我希望將這些值存儲在內存中(以避免多個查詢)並將它們與一個類的不同對象共享。

我想是這樣的:每一個對象()創建調用數據,並執行查詢時

Class Data: 
    def __init__(self, query): 
     self.df = read_sql(query) 

Class Object(Data): 
    def __init__(self, params): 
     super().__init__() 
     # some processes with params 
    def methods(): 
     # some methods which uses values from Class Data 

不過。 有沒有什麼辦法可以分享數據,而不會將它作爲參數傳遞?

數據中可能是類對象嗎?

+1

如果使用不同的查詢?你是說你想緩存呼叫,還是在班級而不是實例上運行? –

+1

如果您想保留每個實例在查詢中傳遞的機會,您應該在類級別緩存查詢結果和查詢本身,然後在運行查詢之前檢查它是否在緩存中,否則爲什麼需要查詢參數? –

+0

@PadraicCunningham我有類似的數據結構需要不同的查詢,因此參數。我如何緩存查詢的結果? – JMFilipe

回答

0

你在做什麼不是分享,而是繼承。如果你想用的Object幾個實例重用的Data相同的實例那麼這可能是有意義的:

Class Data: 
    def __init__(self, query): 
     self.df = read_sql(query) 

Class Object: 
    def __init__(self, data, params): 
     self.data = data 
     # some processes with params 

    def methods(): 
     # some methods which uses values from Class Data 

這是你將怎樣使用這些類:

data = Data(query) 
obj1 = Object(data, params1) 
obj2 = Object(data, params2)