[英]Allow subclass in a class to access base class properties
我正在努力使自己了解Python類,並想知道是否有人可以幫助我解決以下問題?
我有一個基類,打算包含有關數值模擬和模擬結果的所有信息。 但是,我還有一些例程,可以將模擬數據輸出到文件中,以便以后使用。
因此,我想編寫自己的代碼來處理和繪制模擬數據,並將其放在一個單獨的類中添加到主模擬類中(並在一個單獨的.py文件中進行整潔)。 然后,該繪圖類可以具有兩個初始化選項:要么用於在主模擬類的當前現有實例中處理數據,要么從准備處理的文件中加載模擬數據。
對於前一種情況,應將繪圖類初始化為:Simulation.plot = Plotter(),然后可以訪問主模擬類的所有屬性。 但是我不知道如何允許該子類訪問所有基類的屬性。
一個顯示我的情況和問題的基本示例是:
class SimClass(object):
def __init__(self, param1):
self.param1 = param1
# and many other parameters
def run(self):
# code to run the simulation
self.results = results
# initialise plotter as subclass
self.plot = SimPlot()
class SimPlot(object):
def init_from_saved_data(self, file_path):
self.results = code_to_load_data_from_file
def init_from_existing_sim(self):
pass #not sure how to do this
def plot1(self):
plot(self.results[:,0], self.param1 * self.results[:,1]
對於“繪圖”代碼在現有sim對象上運行的情況,用法是:
sim = SimClass(param1 = 5)
sim.run()
sim.plot1()
請歡迎提出任何建議(甚至只是指出我在上面有關類和OOP的情況下可能誤用的術語)。
謝謝!
您這里沒有基類和子類,您有兩個完全獨立的類,它們之間沒有關系。 為了使SimPlot成為SimClass的子類,您需要這樣聲明:
class SimPlot(SimClass):
...
現在,任何SimPlot實例都可以自動訪問其父類的所有屬性。
聽起來您只需要訪問SimPlot中的SimClass實例即可。
您想要這樣的東西:
class SimClass(object):
def run(self):
self.results = ...
self.plot = SimPlot(self)
class SimPlot(object):
def __init__(self, simclass):
self.simclass = simclass
def plot1(self):
# access simclass' attribute(s)
self.simclass.results
sim = SimClass()
sim.run()
sim.plot.plot1()
(根據您的評論更新)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.