python-3.x 如何将一个类的示例传递给另一个类?

wnvonmuf  于 2023-01-27  发布在  Python
关注(0)|答案(1)|浏览(149)

几天来,我一直在尝试将一个变量的示例从一个类传递到另一个类,直到最近我才能让它工作。我读了这篇关于类和示例的文档,我在网上搜索了stackoverflow,我一直没有得到答案,直到我尝试了以前问过的question的解决方案,它解决了我的问题。然而,我不太确定它的“为什么”和“如何”工作。
我的代码如下所示:

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()

在类writeDoc下,每当我将鼠标悬停在参数First上时,它不是对Class First的引用,因此我不确定它如何访问entry1。对于writeDoc(First=self)中的First也是如此。另外,为什么writeDoc(First=self)可以工作,而writeDoc(self.First)不能工作?
我假设当我想引用另一个类并想传递它的示例时,我需要执行以下操作

class First:
....
def clicked(self):
writeDoc(First)
....

class writeDoc(First):
    def __init__(self, First):
    super().__init__(First):
...

但是,这对我根本不起作用。
我希望这不是一个加载/混乱的问题,我想了解这是如何工作的,以创建更好的代码,避免误解python类是如何工作的。

6pp0gazn

6pp0gazn1#

clicked()方法中,self引用First类的示例。

writeDoc(First=self)

它将该示例作为First参数的值传递给writeDoc类的__init__()方法。这与将任何其他对象作为方法参数传递没有什么不同。
writeDoc(self.First)不起作用,因为self示例中没有First属性。First是类的名称,而不是属性。

相关问题