【问题标题】:Is it possible for an instance of a class within a different class to inherit its variables不同类中的类的实例是否可以继承其变量
【发布时间】:2020-11-14 15:53:05
【问题描述】:

我有 2 个课程,一个进行计算 calc,另一个设置并运行 setuprun 计算。

我在setuprun 中有多个calc 类实例,可以为每个tab 一次性运行多个计算。 method from here

目前它们是单独的类,但我想从setuprun 继承变量到calc,特别是excelbookcases,以删除一些重复的代码。我尝试了各种父、子和超级组合,但没有成功。

我想我的问题是;不同类中的类的实例是否有可能继承其变量 - 在我写这篇文章时,我的感觉不是......

任何指针将不胜感激。谢谢。

代码如下:

class calc():

    def __init__(self, excelbook, tab, cases):
        self.excelbook = excelbook
        self.cases = cases
        self.tab = tab

    def run(self):
        print(self.excelbook, self.cases, self.tab)


class setuprun():

    def __init__(self, excelbook, cases):
        self.excelbook = excelbook
        self.gettabs()
        runs = [calc(excelbook, t, cases) for t in self.tabs]
        for run in range(len(runs)):
            runs[run].run()
        self.check = runs

    def gettabs(self):
        self.tabs = list(self.excelbook)

可以运行:

a = setuprun('xlsx', 100)

【问题讨论】:

    标签: python-3.x inheritance python-class


    【解决方案1】:

    在我写这篇文章的时候,我的感觉不是...... 不要小看 Python ;)

    您的代码有些奇怪,我不明白:您正在使用字符串 'xlsx' 的长度来实例化 calc 类。它只是打印

    xlsx 100 x
    xlsx 100 l
    xlsx 100 s
    xlsx 100 x
    

    这对我来说很好,但在你的最终申请中可能不正确。

    实例化类setuprun 后,它每次实例化4 个类calc()excelbookcases 的值相同。这两个变量是类setuprun的实例变量。

    你能做的就是把它们变成class变量。之后,您可以直接引用它们,因此您不需要使用公共变量实例化类calc

    因为对类使用大写名称是一种很好的做法(以将它们与实例变量区分开来),所以我在下面的改编代码中这样做:

    class Calc():
    
        def __init__(self, tab):
            self.excelbook = Setuprun.excelbook
            self.cases = Setuprun.cases
            self.tab = tab
    
        def run(self):
            print(self.excelbook, self.cases, self.tab)
    
    class Setuprun():
    
        def __init__(self, excelbook, cases):
            Setuprun.excelbook = excelbook
            Setuprun.cases = cases
            self.gettabs()
            runs = [Calc(t) for t in self.tabs]
            for run in range(len(runs)):
                runs[run].run()
            self.check = runs
    
        def gettabs(self):
            self.tabs = list(self.excelbook)
            
    a = Setuprun('xlsx', 100)
    

    我不太确定这是否是您要查找的内容,但我希望它能回答您的问题。

    【讨论】:

    • 谢谢!这就是我试图做的,与 super().__init__() 纠缠不清。没有意识到您可以直接从另一个类调用变量。奇怪的是只是在代码中复制了一个函数,但并没有真正改变任何东西。
    • 我能理解,一旦你在某个方向寻找答案,有时很难看到其他可能性。很高兴它有帮助!
    猜你喜欢
    • 2012-05-16
    • 2013-08-16
    • 2018-05-06
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多