通过多个类继承类

时间:2010-02-16 12:10:52

标签: python inheritance parameters class

我有3个类,我运行第一个类并在第二个类中声明一个变量,并希望第3个类能够打印出这个变量。我有下面的代码来更清楚地解释这一点。

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()

第3类的函数由第2类调用,但第2类的值不会传递给第3类。

class Class3():

    def printValue(self):
        print self.string1

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

所以我的问题是当我将第一个类作为主脚本运行时,如何将第二个类中的变量传递给第3个类?

感谢您的帮助。

此脚本仅供参考,在我的脚本中我有3个文件。我需要从文件中的第一个类开始,然后使用第二个类的函数,然后创建一个变量,然后我在第三个类中运行函数时使用它。但是所有这些都需要通过执行第一个类来运行。所有类都必须在单独的文件中。

对不起,感谢困惑,谢谢

当我通过像以下参数传递值来使用函数时,我可以这样做:

string1 = 'Hello'
printValue(string1)

然后printValue函数在运行时可以使用此值。我只是无法使用Classes,因为传递参数似乎是一个问题,因为self

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

我建议:

File1中

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()如果你需要合作MI + google:为什么python的super被认为是有害的!]。总而言之,truppo的答案可能就是你所需要的。我的回答只是指出,在我非常主观的意见中,更好的方法是实现你所需要的。我还建议使用新的样式类。