python-3.x – 需要从不同的类调用类方法而不需要初始化第一个类或其他方式

python-3.x – 需要从不同的类调用类方法而不需要初始化第一个类或其他方式,第1张

概述我的代码有一个小问题. 有两个班.第一个创建一个带有选项按钮的窗口.单击该按钮后,将调用第二个类并使用“确定”按钮创建另一个窗口.假设还有一个复选框,可以将背景颜色更改为黑色或类似的颜色.单击按钮后,选项中所做的任何更改都将存储到文件中,并关闭第二个窗口. 所有这一切都很好.我的问题是,现在我需要调用第一个类中的方法update_init,它将把这些更改应用到MainWindow.下面的代码显示了 我的代码有一个小问题.

有两个班.第一个创建一个带有选项按钮的窗口.单击该按钮后,将调用第二个类并使用“确定”按钮创建另一个窗口.假设还有一个复选框,可以将背景颜色更改为黑色或类似的颜色.单击按钮后,选项中所做的任何更改都将存储到文件中,并关闭第二个窗口.

所有这一切都很好.我的问题是,现在我需要调用第一个类中的方法update_init,它将把这些更改应用到MainWindow.下面的代码显示了我对这个问题的第一个解决方案,但从我的理解,通过使用第二个主循环,我创建了第二个线程,应该避免.

class MainWindow:    def __init__(self,master):        self.master = master        self.options_btn = tk.button(self.master,text="Options",command=self.open_options)        self.options_btn.pack()        self.options_window = None    def open_options(self):        options_master = tk.toplevel()        self.options_window = OptionsWindow(options_master)        options_master.mainloop()        lst = Meta_load()   # loads changes from a file        self.update_init(lst)    def update_init(self,lst):        #codeclass OptionsWindow:    def __init__(self,master):        self.master = master        self.ok_btn = tk.button(self.master,text="OK",command=self.update_Meta)        self.ok_btn.pack()    def update_Meta(self):        Meta_save(12)  # saves changes into a file        self.master.destroy()main_master = tk.Tk()main_master.minsize(wIDth=1280,height=720)b = MainWindow(main_master)main_master.mainloop()

我的第二个解决方案是将两个类放在一个,但如果我这样做,代码就会非常混乱.
我可以在不初始化新的MainWindow类窗口的情况下以某种方式从OptionsWindow类调用方法update_init(在MainWindow类中)吗?或者还有其他方法可以解决这个问题吗?我将不胜感激任何帮助.

我很抱歉,如果这太具体了,我试图尽可能地使它尽可能一般,但这是一个非常具体的问题,我无法在互联网上找到任何关于它的信息.

解决方法 一般情况下,你可以从你想要的任何地方调用一个类方法,并传递任何东西,而不需要初始化该类的实例,这要归功于python的客观特性,但要注意自我依赖!虽然,我认为这不是一个好习惯.

class A:    def __init__(self):        self.foo = 'foo'    def return_foo(self):        return self.fooclass B:    def __init__(self):        self.bar = 'bar'        print('Ha-ha Im inited!')    def return_bar(self):        try:            return self.bar        except AttributeError:            return 'bar'def test():    a = A()    # b = B()    return_bar = getattr(B,'return_bar',None)    if callable(return_bar):        print('%s%s' % (a.return_foo(),return_bar(None)))test()

链接:

> getattr
> callable

总结

以上是内存溢出为你收集整理的python-3.x – 需要从不同的类调用类方法而不需要初始化第一个类或其他方式全部内容,希望文章能够帮你解决python-3.x – 需要从不同的类调用类方法而不需要初始化第一个类或其他方式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1196283.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存