【问题标题】:how do i Inherit return values from parent class and plot them in the child class?我如何从父类继承返回值并将它们绘制在子类中?
【发布时间】:2023-01-12 07:46:48
【问题描述】:

所以我有一个工作正常的父类,但我正在努力从父类获取返回值并将它们与子类一起绘制。理想情况下,我会从父类调用一个方法(子类调用该方法)并使用子类中的返回值并绘制它们。子类应该能够采用与父类相同的参数。

父类:

from statsmodels.stats.power import FTestAnovaPower
class PwrAnalysis:
    def __init__(self, effect_size=None, nobs=None, alpha=None, alpha2=None, power=None, k_groups=None, rng1=None, rng2=None):
        self.effect_size = effect_size
        self.nobs = nobs
        self.alpha = alpha
        self.alpha2 = alpha2
        self.power = power
        self.k_groups = k_groups
        self.rng1 = rng1
        self.rng2 = rng2

    def pwr_vs_smpl_sz(self):
       
        pwr_vs_smpl_1 = []
        pwr_vs_smpl_2 = []

        for pwr_rng in self.rng1:
            pwr_vs_smpl_1.append(FTestAnovaPower().solve_power(effect_size=self.effect_size,
                                        nobs=None, alpha=self.alpha, power=pwr_rng, k_groups=self.k_groups))
        
        for pwr_rng in self.rng2:
            pwr_vs_smpl_2.append(FTestAnovaPower().solve_power(effect_size=self.effect_size,
                                        nobs=None, alpha=self.alpha2, power=pwr_rng, k_groups=self.k_groups))
        
        return  [pwr_vs_smpl_1, self.rng1], [pwr_vs_smpl_2, self.rng2]

    def pwr_vs_effct_sz(self):
        pwr_vs_effect_size_1 = []
        pwr_vs_effect_size_2 = []
        

        for pwr_rng in self.rng1:
            pwr_vs_effect_size_2.append(FTestAnovaPower().solve_power(effect_size=None,
                                        nobs=self.nobs, alpha=self.alpha, power=pwr_rng, k_groups=self.k_groups))
        for pwr_rng in self.rng2:
            pwr_vs_effect_size_2.append(FTestAnovaPower().solve_power(effect_size=None,
                                        nobs=self.nobs, alpha=self.alpha2, power=pwr_rng, k_groups=self.k_groups))
        
        return  [pwr_vs_effect_size_1, self.rng1], [pwr_vs_effect_size_2, self.rng2]
            
    def smpl_sz_vs_effct_sz(self):
        sample_size_vs_effect_size_1 = []
        sample_size_vs_effect_size_2 = []
        
       
        for num_of_smpls in self.rng1:
            sample_size_vs_effect_size_1.append(FTestAnovaPower().solve_power(effect_size=None,
                                        nobs=num_of_smpls, alpha=self.alpha, power=self.power, k_groups=self.k_groups))
        for num_of_smpls in self.rng2:
            sample_size_vs_effect_size_2.append(FTestAnovaPower().solve_power(effect_size=None,
                                        nobs=num_of_smpls, alpha=self.alpha2, power=self.power, k_groups=self.k_groups))        
            
        return  [sample_size_vs_effect_size_1, self.rng1], [sample_size_vs_effect_size_2, self.rng2]

儿童班:

class PwrPlots(PwrAnalysis):
    def __init__(self, effect_size=None, nobs=None, alpha=None, alpha2=None, power=None, k_groups=None, rng1=None, rng2=None):
        super().__init__(effect_size=None, nobs=None, alpha=None, alpha2=None, power=None, k_groups=None, rng1=None, rng2=None)

    def plt_pwr_vs_smpl(self):

        # plot 1
        plt.plot(super().pwr_vs_smpl_1, self.rng1, 'b', marker='o', label=f'alpha={self.alpha:.2f}')
        
        #plot 2

        plt.plot(super().pwr_vs_smpl_2, self.rng2, 'b', marker='o', label=f'alpha={self.alpha:.2f}')
        
        
#         # labels, title, legend etc...
#         plt.title('Power vs Sample size')
#         plt.xlabel('Power')
#         plt.ylabel('Sample Size')
#         plt.legend(loc="lower right")
#         #plt.grid()
       
    
#     def plt_pwr_vs_effct_sz(self):


   

#     def plt_smpl_sz_vs_effct_sz(self):

  

【问题讨论】:

  • 您不需要使用super()。由于方法是继承的,你可以调用self.pwr_vs_smpl_1(...)
  • pwr_vs_smpl_1 不是父类中的方法。它是 pwr_vs_smpl_sz() 方法中的局部变量,在其他任何地方都无法访问。

标签: python class inheritance methods


【解决方案1】:

您应该调用该父函数并只获取它返回的值:

class PwrPlots(PwrAnalysis):
    def plt_pwr_vs_smpl(self):
        # you can use self if you don't override that function in base class
        result = self.pwr_vs_smpl_sz() 
        # result contains list of two elements
        pwr_vs_smpl_1, pwr_vs_smpl_2 = result[0][0], result[1][0]
        # plot 1
        plt.plot(pwr_vs_smpl_1, self.rng1, 'b', marker='o', label=f'alpha={self.alpha:.2f}')
        ...


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多