For a couple of days I've been attempting to pass an instance of a variable from one of my classes to another, and until recently I have not been able to get it to work. I've read this document regarding classes and instances, I've searched online and stackoverflow and I couldn't get an answer until I tried a solution from a previous asked question and it solved my problem. However, I'm not exactly sure on the why and the how it works.
My code goes as follows, :
from tkinter import *
def main():
main_window = Tk()
app = First(main_window)
main_window.mainloop()
class First:
def __init__(self, root):
self.root = root
self.root.title('First Window')
self.entry1 = Entry(self.root)
self.entry1.pack()
btn = Button(self.root, text="click", command=self.clicked)
btn.pack()
def clicked(self):
writeDoc(First=self)
class writeDoc:
def __init__(self, First):
self.First = First
txt = self.First.entry1.get()
print(txt)
if __name__ == '__main__'
main()
Under the class writeDoc
whenever I hover over the parameter First
it is not a reference to the Class First
, so I am unsure how it has access to entry1
. The same goes for the First
within writeDoc(First=self)
. Addtionally, why does writeDoc(First=self)
work but not writeDoc(self.First)
?
I assumed when I want to reference to another class and want to pass its instances over I would need to do
class First:
....
def clicked(self):
writeDoc(First)
....
class writeDoc(First):
def __init__(self, First):
super().__init__(First):
...
But, this didn't work for me at all.
I hope this isn't a loaded/jumbled question. I want to understand how this works to create better code and avoid misunderstanding how python classes works.
Inside the clicked()
method, self
refers to an instance of the First
class. It then does
writeDoc(First=self)
which passes that instance to the writeDoc
class's __init__()
method, as the value of its First
parameter. This is no different from passing any other object as a method parameter.
writeDoc(self.First)
doesn't work because there's no First
attribute in the self
instance. First
is the name of the class, not an attribute.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.