Как правильно составить импорты?
Я пытался попробовать написать консольное меню, но я не понимаю как правильно использовать импорты в файлах Вот что у меня есть:
- root
- testlib
- __init__.py
- base.py
- app.py
- start.py
start.py
import testlib
import app
if __name__ == "__main__":
app = app.ConsoleApp(testlib.Menu)
app.mainloop()
app.py
class ConsoleApp:
TEXT_INPUT = "Выберете вариант: "
def __init__(self, __function):
self.__screen = __function()
def mainloop(self):
while True:
self.__option = input(self.TEXT_INPUT)
self.__screen = self.__screen.select(self.__option)
testlib
# __init__.py
from .base import *
# base.py
class PrintMain:
def __init__(self):
self.name = self.__class__
self.print()
class Menu(PrintMain):
def print(self):
print(f'''
При запуске - выбор
[q] Exit
[1] Menu2
''')
def select(self, __option):
if __option == "q":
raise TypeError("Выход из программы")
if __option == "1":
return Menu2()
else:
return self.name()
class Menu2(PrintMain):
def print(self):
print(f'''
При запуске - выбор
[q] Exit
[1] Menu3
''')
def select(self, __option):
if __option == "q":
raise TypeError("Выход из программы")
if __option == "1":
return Menu3()
else:
return self.name()
class Menu3(PrintMain):
def print(self):
print(f'''
При запуске - выбор
[q] Exit
[1] Menu
''')
def select(self, __option):
if __option == "q":
raise TypeError("Выход из программы")
if __option == "1":
return Menu()
else:
return self.name()
Так всё работает. Но я хочу сделать так:
- root
- testlib
- __init__.py
- base.py
- menu.py
- menu2.py
- menu3.py
- app.py
- start.py
Чтобы файл (menu.py, menu2.py, menu3.py) имели один класс с таким же названием
# __init__.py
from .base import *
# base.py
class PrintMain:
def __init__(self):
self.name = self.__class__
self.print()
# menu.py
class Menu(PrintMain):
def print(self):
print(f'''
При запуске - выбор
[q] Exit
[1] Menu2
''')
def select(self, __option):
if __option == "q":
raise TypeError("Выход из программы")
if __option == "1":
return Menu2()
else:
return self.name()
# menu2.py
class Menu2(PrintMain):
def print(self):
print(f'''
При запуске - выбор
[q] Exit
[1] Menu3
''')
def select(self, __option):
if __option == "q":
raise TypeError("Выход из программы")
if __option == "1":
return Menu3()
else:
return self.name()
# menu3.py
class Menu3(PrintMain):
def print(self):
print(f'''
При запуске - выбор
[q] Exit
[1] Menu
''')
def select(self, __option):
if __option == "q":
raise TypeError("Выход из программы")
if __option == "1":
return Menu()
else:
return self.name()
Проблема в том, что я не понимаю, как написать импорты, чтобы не возникала ошибка типа - "PrintMain not found" у файлов menu.py, menu2.py, menu3.py. Чтобы можно было обратиться в start.py как:
testlib.Menu
testlib.Menu2
testlib.Menu3
Помогите пожалуйста, я уже несколько дней не могу решить.