簡體   English   中英

允許類中的子類訪問基類屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM