【问题标题】:tkinter sharing instance variables between classestkinter 在类之间共享实例变量
【发布时间】:2021-04-02 02:11:44
【问题描述】:

我创建了一个应用程序,它只有一个包含所有功能的大类。代码运行顺利。

代码可以分为几个部分,例如:GUI、处理任务的纯块代码。

我想将原始类分成 2 个类,1 个是应用程序的 GUI,另一个是处理任务的块代码。

问题是当我这样做时,2 个类使用另一个类的实例变量。请问如何解决这个问题,请帮忙,谢谢。

原类示例:

Class App:
    def __init__(self):
        self.var1 = 'first variable'
        self.var3 = 'third variable'
    def method1(self):
        self.var2 = 'second variable'
        print(self.var3) 
    def method2(self):
        print(self.var2)  
        self.method1()

这是 2 个新类的示例(我只是将它们拆分,没有修改任何内容):

Class GUI:
    def __init__(self):
        self.var1 = 'first variable'
    
    def method1(self):
        self.var2 = 'second variable'
        print(self.var3)  # <-- var3 is belonged to class Core

Class Core:
    def __init__(self):
        self.var3 = 'third variable'
    def method2(self):
        print(self.var2)  # <-- var 2 is belonged to class GUI
        self.method1()  # <-- method1 belonged to class GUI too

【问题讨论】:

  • 如何将所有变量保留在 init 方法中?无论如何应该是这样的。所以当你拆分一些变量时,只是没有被使用
  • 将实例变量放在__init__ 中只是为了声明它,对吧?因为我必须稍后在类的方法中使用它们
  • 有点像(这不是强制性的,因为您可以在其他函数中定义它们,但它只会引发 PEP 错误或某事(代码仍在运行))但在这种情况下它只会帮助您,但实际上这里的答案也是一个很好的解决方法

标签: python class tkinter


【解决方案1】:

我认为这是解决方案:

class GUI:
    var2 = None

    def __init__(self):
        self.var1 = 'first variable'

    @staticmethod
    def method1():
        GUI.var2 = 'second variable'
        print(Core.var3)  # <-- var3 is belonged to class Core


class Core:
    var3 = None
    
    def __init__(self):
        Core.var3 = 'third variable'

    @staticmethod
    def method2():
        print(GUI.var2)  # <-- var 2 is belonged to class GUI
        GUI.method1()  # <-- method1 belonged to class GUI too

你应该让你的变量和方法static。您可以在python 中阅读更多关于静态方法和变量的信息:Are static class variables possible in Python?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多