Python: класс A создает экземпляры классов B и C, как B и C могут вызывать функции в A или друг в друге? - PullRequest
0 голосов
/ 21 марта 2019

У меня есть три класса, которые должны быть в отдельных файлах: А, В и С

A создает B и C. Теперь мне нужно, чтобы B мог сказать A, что ему пора что-то сделать с C. Как это сделать?

В моем конкретном случае я использую tkinter для создания нескольких окон, и когда кто-то нажимает на кнопку в одном окне, я хочу переключиться на другое окно. Однако, поскольку Python в первую очередь медлит с созданием окон, я бы хотел предварительно загрузить их все и просто переключаться между ними, удерживая любую общую информацию в диспетчере экрана.

Я пробовал несколько вещей, и решение, которое кажется мне наиболее перспективным, - это создание еще одного объекта, который является родителем для A (скажем, P). Теперь я могу передать A в функции в B и C, а затем из B и C, я могу вызвать функции A. И поскольку я могу импортировать родительский объект, не беспокоясь о циклическом импорте, я могу сказать B и C, для чего определены функции A. Не можете понять, как сказать B и C, что A относится к типу P, хотя проблема в том, что, похоже, нет способа привести объект из одного класса в другой.

Есть мысли о том, как сделать то или иное лучшее решение этой проблемы в целом?

1 Ответ

2 голосов
/ 21 марта 2019

Вы можете инициализировать B экземпляром класса A, таким как self.A, установить для него экземпляр A, который сгенерировал это B, и использовать его для вызова вашей функции в A, которая влияет на C. Когда все будет в порядке, ваш вызов из экземпляра B должен выглядеть следующим образом: self.A.dosomethingwithC()

Наличие образца вашего кода, с которым можно было бы играть, облегчило бы объяснение.

Вот пример того, что я имел в виду:

File1.py:

from File2 import *
class A():
    def __init__(self):
        self.myB = B(self)
        self.myC = C()
    def doCthing(self):
        self.myC.go()

someA = A()
someA.myB.doC()

File2.py

class B():
    def __init__(self,myA):
        self.myA = myA
    def doC(self):
        self.myA.doCthing()
class C():
    def __init__(self):
        pass
    def go(self):
        print("Made it")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...