通过多个类的类继承

1 投票
2 回答
3437 浏览
提问于 2025-04-15 19:20

我有三个类,我先运行第一个类,然后在第二个类里声明一个变量,想让第三个类能够打印出这个变量。下面的代码可以更清楚地说明这个问题。

from class2 import Class2
class Class1(Class2):

    def __init__(self):
        self.value1 = 10
        self.value2 = 20


    def add(self):
        self.value3 = self.value1 + self.value2

    def multiply(self):
        Test.subtract()

if __name__ == '__main__':
    Class1 = Class1()
    Class1.add()
    Class1.Multiply()

上面的类调用了第二个类里的函数,这些函数使用了被调用的值。

from class3 import Class3
class Class2(Class3):

    def e(self):
        self.value4 = self.value3 - self.value2
        print self.value4
        self.string1 = 'Hello'
        Class2.printValue()

Class2 = Class2()

第三个类的函数是由第二个类调用的,但第二个类里的值并没有传递到第三个类。

class Class3():

    def printValue(self):
        print self.string1

if __name__ == '__main__':
    Class3 = Class3()

所以我想问的是,当我把第一个类作为主脚本运行时,怎么才能把第二个类里的变量传递到第三个类呢?

谢谢大家的帮助。

这个脚本只是个例子,实际上我有三个文件。我需要先在一个文件中启动第一个类,然后使用第二个类的函数,这些函数会创建一个变量,我再在运行第三个类的函数时使用这个变量。但这一切都需要通过执行第一个类来完成。所有的类都必须放在不同的文件里。

抱歉让大家困惑了,谢谢。

我可以通过使用函数来做到这一点,像这样通过参数传递值:

string1 = 'Hello'
printValue(string1)

然后这个值可以在运行时被printValue函数使用。但我在使用类的时候就搞不定了,因为传递参数似乎因为self的问题而变得复杂。

2 个回答

0

我建议你:

文件1

class Class3:
    def __init__(self):
        #I'd really like to do self.string1 = "" or something concrete here.
        pass

    def printValue(self):
        #Add exception handling
        #self may not have a `string1`
        print self.string1

文件2

from File1 import Class3

class Class2(Class3):
    def __init__(self):
        Class3.__init__(self)
        self.string1 = 'Hello'

    def e(self):
        self.value4 = self.value3 - self.value2
        print self.value4
        self.printValue()

文件3

from File2 import Class2

class Class1(Class2):
    def __init__(self):
        Class2.__init__(self)
        self.value1 = 10
        self.value2 = 20

    def add(self):
        self.value3 = self.value1 + self.value2


if __name__ == '__main__':
    obj1 = Class1()
    #The order of calling is important! value3 isn't defined until add() is called
    obj1.add()
    obj1.e()
    print obj1.value3

我假设这里没有多重继承的情况【如果你需要合作式多重继承,可以使用super(),并且可以搜索一下“为什么Python的super被认为是有害的!”】。总的来说,truppo的回答可能正是你需要的。我这里的回答只是指出,在我个人的看法中,有一种更好的方法来实现你的需求。我还建议使用新风格的类。

1

你的代码连运行都不能,所以我有点搞不清楚你想要做什么。你可能想要的是这样的:

class Class3():

    def printValue(self):
        print self.string1

class Class2(Class3):

    def e(self):
        self.value4 = self.value3 - self.value2
        print self.value4
        self.string1 = 'Hello'
        self.printValue()

class Class1(Class2):

    def __init__(self):
        self.value1 = 10
        self.value2 = 20

    def add(self):
        self.value3 = self.value1 + self.value2


if __name__ == '__main__':
    instance1 = Class1()
    instance1.add()
    instance1.e() # will print "10" and "Hello"
    print instance1.value3 # will print "30"

撰写回答