如何使界面与投射一起使用

时间:2019-04-04 14:05:42

标签: python python-3.x class oop casting

因此,我正在使用MVC架构对Python程序进行编程,我希望一切都很好并且彼此分离。我不希望我的GUI视图必须与Controllers实例一起使用,依此类推。因此,我做了一个'IController'抽象类,它是'Controller'的父类,它具有所有功能。在“ IController”中,我具有需要访问模型和视图的功能。控制器看起来像这样:

class IController:
     def method(self):
          pass

class Controller(IController):
     self.x = 'Hello'
     def method(self):
          print('self.x)

那我以前去过的地方

class Frame(tk.Frame):
    def __init__ (self, controller):
            self.controller = controller
    button = tk.Button(self, command=lambda: self.controller.method()

我现在想把它变成

class Frame(tk.Frame):
    def __init__ (self, controller):
            self._controller = type(controller)
    button = tk.Button(self, command=lambda: self._controller.method()

这里的问题是,当我这样做时,我无法保留“ Controller”类的实例。我需要这个,因为实例具有我需要在此处使用的值和方法。我也无法将'Controlle'r的实例保存在'IController'中,因为它是一个抽象类,所以我不会实例化它,也无法在其中保存任何内容。

我希望它能正常工作,但是我不确定现在是否可行。我读到在python中无法进行强制转换,但是我认为必须有另一种方法可以解决此问题。当我运行它时,它告诉我我缺少“自我”。我无法将其与Controller实例一起发送,因此不会被封装。有办法解决吗?

1 个答案:

答案 0 :(得分:0)

对于可能尝试相同操作的其他人:不可能像在C#或其他程序中那样进行操作。我通过用C#重写程序来解决它。那和一些丑陋的解决方法是唯一的可能。