繁体   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