如何将变量从一个 class 传递到另一个?
how can I pass variables from one class to another?
我更新了这个问题。我正在创建两个 windows 并尝试将在 class A 中创建的变量传递给 class B。请您指出我的代码中的问题是什么?这是我的方法:
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_name_ses
和csv_name_sub
不会传递给class App
,因为它们不会在[=23]中打印出来=].
我也尝试了如下的Composition方法,还是无法解决问题:
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 class 需要实例化 3 个参数,而您只提供了一个 "root"。
由于Welcome
class的构造函数是__init__(self, master, csv_name_sub, csv_name_ses)
,所以需要为csv_name_sub
和csv_name_ses
提供一个值来实例化这个class。由于您实际上并未使用 csv_name_sub
和 csv_name_ses
的传递值(请参阅 Welcome
class 的 __init__
函数的前 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
使用默认参数和 or
初始化 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())
在使用super class
时,要从父class继承var和值,子class需要引用父class,这样Welcome.csv_name_ses
.
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()
我更新了这个问题。我正在创建两个 windows 并尝试将在 class A 中创建的变量传递给 class B。请您指出我的代码中的问题是什么?这是我的方法:
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_name_ses
和csv_name_sub
不会传递给class App
,因为它们不会在[=23]中打印出来=].
我也尝试了如下的Composition方法,还是无法解决问题:
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 class 需要实例化 3 个参数,而您只提供了一个 "root"。
由于Welcome
class的构造函数是__init__(self, master, csv_name_sub, csv_name_ses)
,所以需要为csv_name_sub
和csv_name_ses
提供一个值来实例化这个class。由于您实际上并未使用 csv_name_sub
和 csv_name_ses
的传递值(请参阅 Welcome
class 的 __init__
函数的前 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
使用默认参数和 or
初始化 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())
在使用super class
时,要从父class继承var和值,子class需要引用父class,这样Welcome.csv_name_ses
.
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()