Python 如何将变量从一个类传递到另一个类?
我更新了这个问题。我正在创建两个窗口,并试图将在类A中创建的变量传递给类B。请您指出我的代码中的问题是什么?以下是我的方法:Python 如何将变量从一个类传递到另一个类?,python,class,variables,inheritance,composition,Python,Class,Variables,Inheritance,Composition,我更新了这个问题。我正在创建两个窗口,并试图将在类A中创建的变量传递给类B。请您指出我的代码中的问题是什么?以下是我的方法: class Welcome: def __init__(self, master, csv_name_sub, csv_name_ses): self.entrySes = Entry(self.master, bg="LemonChiffon3") self.entrySub=Entry(self.ma
class Welcome:
def __init__(self, master, csv_name_sub, csv_name_ses):
self.entrySes = Entry(self.master, bg="LemonChiffon3")
self.entrySub=Entry(self.master,bg="LemonChiffon3")
self.csv_name_sub = str(self.entrySub.get())
self.csv_name_ses = str(self.entrySes.get())
#here users enter some info, they are saved to be used as file name the in following class
class App(Welcome):
def __init__(self, master):
Welcome.__init__(self, master, csv_name_ses, csv_name_sub) #I'm trying use this line to pass the variables from the first class
print('session is', self.csv_name_ses)
print("subject is", self.csv_name_sub)
self.resultFile = open(
"C:\\Users\\xxx" + self.csv_name_sub + '_' + self.csv_name_ses +
'_results.csv', 'w')
#.....
#other codes
def main():
root = Tk()
myApp = Welcome(root, csv_name_ses, csv_name_sub)
root.mainloop()
if __name__ == '__main__':
main()
程序可以运行,但变量csv\u name\u ses
和csv\u name\u sub
不会传递到class App
,因为它们不会在类中打印出来
我也试过下面的构图方法,还是解决不了问题:
class Welcome:
def __init__(self, master, csv_name_sub, csv_name_ses):
self.entrySes = Entry(self.master, bg="LemonChiffon3")
self.entrySub=Entry(self.master,bg="LemonChiffon3")
self.csv_name_sub = str(self.entrySub.get())
self.csv_name_ses = str(self.entrySes.get())
class App:
def __init__(self, master, csv_name_ses, csv_name_sub):
self.csv_name_sub = csv_name_sub
self.csv_name_ses = csv_name_ses
self.welcomePage = Welcome(master, csv_name_ses, csv_name_sub)
print('session is', self.welcomePage.csv_name_ses)
print("subject is", self.welcomePage.csv_name_sub)
self.resultFile = open(
"C:\\Users\\xxx + self.welcomePage.csv_name_sub + '_' + self.welcomePage.csv_name_ses +
'_resultsofPart.csv', 'w')
问题是Welcome类需要实例化3个参数,而您只给出了一个“root”参数。因为Welcome类的构造函数是
\uuuu init\uuuuuu(self、master、csv\u name\u sub、csv\u name\u ses)
,您需要为csv\u name\u sub
和csv\u name\u ses
提供一个值,并实例化该类。由于您实际上没有使用传递的csv\u name\u sub
和csv\u name\u ses
(请参见欢迎
类的初始化
函数中的前4行),因此这可能是一个有效的解决方案:
class Welcome:
def __init__(self, master):
self.entrySes = Entry(self.master, bg="LemonChiffon3")
self.entrySub=Entry(self.master,bg="LemonChiffon3")
self.csv_name_sub = str(self.entrySub.get())
self.csv_name_ses = str(self.entrySes.get())
#here users enter some info, they are saved to be used as file name the in following class
class App(Welcome):
def __init__(self, master):
Welcome.__init__(self, master)
print('session is', self.csv_name_ses)
print("subject is", self.csv_name_sub)
self.resultFile = open(
"C:\\Users\\xxx" + self.csv_name_sub + '_' + self.csv_name_ses +
'_results.csv', 'w')
#.....
#other codes
使用默认参数和
或初始化self
字段:
class Welcome:
def __init__(self, master, csv_name_sub=None, csv_name_ses=None):
self.entrySes = Entry(self.master, bg="LemonChiffon3")
self.entrySub=Entry(self.master,bg="LemonChiffon3")
self.csv_name_sub = csv_name_sub or str(self.entrySub.get())
self.csv_name_ses = csv_name_ses or str(self.entrySes.get())
在使用超级类
时,要从父类继承var和值,子类需要引用父类,以便Welcome.csv\u name\u使用
class Welcome:
def __init__(self, master, csv_name_sub, csv_name_ses):
self.entrySes = Entry(self.master, bg="LemonChiffon3")
self.entrySub=Entry(self.master,bg="LemonChiffon3")
writeToFile()
def writeToFile(self):
Welcome.csv_name_sub = str(self.entrySub.get())
Welcome.csv_name_ses = str(self.entrySes.get())
class App(Welcome):
def __init__(self, master, csv_name_ses, csv_name_sub):
Welcome.__init__(self, master, csv_name_ses, csv_name_sub)
self.csv_name_sub = Welcome.csv_name_sub
self.csv_name_ses = Welcome.csv_name_ses #parent.var
def main():
root = Tk()
myApp = Welcome(root, csv_name_ses, csv_name_sub)
root.mainloop()
谢谢,我添加了另外两个变量,程序现在可以运行了。但是csv\u name\u sub
和csv\u name\u ses
仍然没有传递到第二个类,因为无法在第二个类中打印值。你知道传递变量问题的错误是什么吗?谢谢接受它们作为参数(有几个方法)并调用基类。您还需要创建一个“App”实例,它是“Welcome”的子类——在子类场景中只创建了一个实例,而“passed to class”一词令人费解。或者Welcome作为App的一个子类更合适?或者,也许用作文会更简单、更容易理解?谢谢你的评论和建议。我尝试使用Composition,但仍然不能使用子类中的变量。我已经更新了这个问题,你能帮我看看吗?谢谢你的回答。但它不会传递类应用程序中的变量。我真的不明白你所说的传递值是什么意思,因为我只在文档命名时使用它们。这与其他类型的使用不同吗?谢谢你的建议。我曾尝试使用csv\u name\u sub=None
,csv\u name\u ses=None
,但变量仍然无法从类欢迎
传递到类应用
。你有更详细的解释为什么我要在这里添加None
?谢谢