Dwa moduły wzajemnie się importujące - bład

0

Hey mam pewien problem i nie wiem jak go ugryźć. Mam dwa pliki (moduły). Jeden to powiadomienia.py który zawiera klasę pełną metod zajmujących się generowaniem powiadomień na podstawie zgłoszonych wyjątków, np. pracujący program wyłapują wyjątek, przekazuje go do zaimportowanego wcześniej modułu powiadomienia.py a ten moduł odpowiednio na niego reaguje np. wyświetla komunikat albo wysyła sms...
Drugi plik to gsm.py zawierający klasę z metodami odpowiedzialnymi za rozsyłaniem wiadomości sms itp.
Problem polega na tym, że oba te pliki są sobie potrzebne do prawidłowego działania dlatego powinny się importować wzajemnie ale to niemożliwe. Python wywala błąd.
Przykładowo kiedy kiedy moduł powiadomienia.py uzna, że należy wysłać sms korzysta z zaimportowanego pliku gsm.py. Z drugiej strony kiedy moduł gsm się wysypie, zgłosi wyjątek potrzebuje przesłać go do modułu powiadomienia.py aby ten odpowiednio na niego zareagował

Pliki nie muszą importować całych modułów, mogą importować klasy - ważne żeby działało. Czy da się to zrobić? Wyczytałem, że prawidłowo zaprojektowany program nie ma takich problemów :P dlatego jeśli trzeba będzie te moduły przeprojektować to tak zrobię. Zależy mi bardziej na zrobieniu tego jak należy a nie magicznych sztuczkach oszukania i tymczasowych rozwiązaniach :)

W końcu w ostateczności mógłbym w module gsm.py wstawić łapanie wyjątków i wtedy ten plik nie musiał by importować powiadomienia.py ale to rozwiązanie staje się wtedy mało elastyczne.

0

Wydziel następny moduł z tego co masz który będzie miał ten dzielony kod. Ewentualnie importy możesz dać bezpośrednio do danej funkcji tak żeby złamać cykliczne zależności. Jak chcesz konkretnej odpowiedzi to wstaw kod.

0

W pliku powiadomienia.py importowanie klasy z modułu gsm.py dałem zamiast na samej górze zaraz nad metodą która tego importu potrzebuje - działa. I to jest przynajmniej jak dotąd najlepsze rozwiązanie. Nie muszę przepisywać całego kodu, a tylko jedna metoda w pliku powiadomienia.py potrzebowała skorzystać z gsm.py, także dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1