不同类中的类的实例是不是可以继承其变量

Posted

技术标签:

【中文标题】不同类中的类的实例是不是可以继承其变量【英文标题】: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)

【问题讨论】:

【参考方案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__() 纠缠不清。没有意识到您可以直接从另一个类调用变量。奇怪的是只是在代码中复制了一个函数,但并没有真正改变任何东西。 我能理解,一旦你在某个方向寻找答案,有时很难看到其他可能性。很高兴它有帮助!

以上是关于不同类中的类的实例是不是可以继承其变量的主要内容,如果未能解决你的问题,请参考以下文章

更改对不同类加载器加载的单例类的影响

python 中的类

空类,含有虚函数的类的大小

多态实现的机制

同一线程中类的所有实例中的类的共享数据成员

java多态的实现机制