Python 通过多个类进行类继承

Python 通过多个类进行类继承,python,inheritance,parameters,class,Python,Inheritance,Parameters,Class,我有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.valu

我有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()
第三类的函数由第二类调用,但第二类的值不会传递到第三类

class Class3():

    def printValue(self):
        print self.string1

if __name__ == '__main__':
    Class3 = Class3()
所以我的问题是,当我运行第一个类作为主脚本时,如何将第二个类中的变量传递给第三个类

谢谢你的帮助

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

很抱歉给你添麻烦,谢谢

当我只使用函数时,可以通过如下参数传递值:

string1 = 'Hello'
printValue(string1)

然后,
printValue
函数在运行时可以使用该值。我只是无法让它与类一起工作,因为传递参数似乎是一个问题,因为
self

很难理解您试图做什么,因为您的代码甚至没有运行。 我想这就是你想要做的:

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"

很难理解您试图做什么,因为您的代码甚至没有运行。 我想这就是你想要做的:

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"
我建议:

File1 文件2 File3 我假设完全没有多重继承[Use super(),如果你需要合作的MI+google:Why python的super被认为是有害的!]。总而言之,特鲁波的答案可能正是你所需要的。我的回答只是指出,在我看来,实现你所需要的是一种更好的方式。我还建议使用新样式的类。

我建议:

File1 文件2 File3
我假设完全没有多重继承[Use super(),如果你需要合作的MI+google:Why python的super被认为是有害的!]。总而言之,特鲁波的答案可能正是你所需要的。我的回答只是指出,在我看来,实现你所需要的是一种更好的方式。我还建议使用新样式的类。

哪里定义了“测试”?为什么要用它的一个实例来隐藏类:“Class3=Class3()”?我很难想象这段代码甚至可以运行。示例用实例覆盖类名。请澄清。对不起,Test()是我编写的脚本中留下的,我忘了更改它。现在编辑。继承有方向。您不能从祖先继承方法,但可以从Decentant继承数据。你有这样一个类树:Class3->Class2->Class1(??)@kaizer.se——我不想在两个方向上继承,我想在一个方向上继承,并将一个变量传递给我调用的函数。在哪里定义了“Test”?为什么要用它的一个实例来隐藏类:“Class3=Class3()”?我很难想象这段代码甚至可以运行。示例用实例覆盖类名。请澄清。对不起,Test()是我编写的脚本中留下的,我忘了更改它。现在编辑。继承有方向。您不能从祖先继承方法,但可以从Decentant继承数据。您有这样一个类树:Class3->Class2->Class1(??)@kaizer.se--我不想在两个方向上继承,我想在一个方向上继承,并将一个变量传递给我正在调用的函数。@truppo--这些类在不同的文件中。如果我从
class3
中删除
self.string1
,此代码将运行。我正在尝试让第三类能够打印出
string1
。如果我在
class1
class2
不同的文件之间这样做并不重要。只需将上面的代码粘贴到不同的文件中,并像在代码中那样导入它们。我在不同的文件中尝试过这段代码,但这不起作用。我得到一个错误
self.printValue()TypeError:'int'对象不可调用
调用
printValue()
不能与
self
一起工作。上面的代码可以工作(至少在python 2.6中),即使拆分为多个文件。如果没有,你就没有完全复制它。也许你有旧的“class2/3.py”,很抱歉我把这个类命名为
r
,当我更改名称时,它工作了。我的程序中有一个同名的变量。谢谢你的邀请solution@truppo--这些类位于不同的文件中。如果我从
class3
中删除
self.string1
,此代码将运行。我正在尝试让第三类能够打印出
string1
。如果我在
class1
class2
不同的文件之间这样做并不重要。只需将上面的代码粘贴到不同的文件中,并像在代码中那样导入它们。我在不同的文件中尝试过这段代码,但这不起作用。我得到一个错误
self.printValue()TypeError:'int'对象不可调用
调用
printValue()
不能与
self
一起工作。上面的代码可以工作(至少在python 2.6中),即使拆分为多个文件。如果没有,你就没有完全复制它。也许你有旧的“class2/3.py”,很抱歉我把这个类命名为
r
,当我更改名称时,它工作了。我的程序中有一个同名的变量。感谢您的解决方案协作多重继承需要超级继承,而使用mixin类的简单继承可以不使用。我给您加上一个作为本文的工作,但是变量
string1
需要在func中定义
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()
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