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