Python 通过多个类进行类继承
我有3个类,我运行第一个类,在第二个类中声明一个变量,希望第三个类能够打印出这个变量。我有下面的代码来更清楚地解释这一点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
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