通过多个类的类继承
我有三个类,我先运行第一个类,然后在第二个类里声明一个变量,想让第三个类能够打印出这个变量。下面的代码可以更清楚地说明这个问题。
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"