Как заставить интерфейс работать с кастингом? - PullRequest
0 голосов
/ 04 апреля 2019

Итак, я программирую свою программу Python с помощью MVC-Architecture, и я хочу, чтобы все было красиво и отделено друг от друга.Я не хочу, чтобы View моего 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, но я думаю, что должен быть другой способ исправить это.Когда я запустил его, он сказал мне, что мне не хватает «я».Я не могу отправить экземпляр контроллера с ним, тогда он не будет капсулирован.Есть ли способ обойти это?

1 Ответ

0 голосов
/ 14 июня 2019

Для других людей, которые могут попробовать то же самое: это невозможно сделать так, как вы делали бы это в C # или других.Я решил это, переписав свою программу и изучив C #.Это и некоторые уродливые обходные пути - единственные возможности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...