#python #pycharm #python-3.8
Вопрос:
Я работаю над проектом, в котором набор функций событий тестируется в дереве объектов.
class ObjectA:
pass
class ObjectB:
def on_event(text: str):
print(text)
many_objects = [
ObjectA(),
ObjectA(),
ObjectA(),
ObjectA(),
ObjectA(),
ObjectB(), # <<<
ObjectA()
]
def call_on_event(text: str):
for obj in many_objects:
if hasattr(obj, 'on_event'):
func = getattr(obj, 'on_event')
if callable(func):
func.on_event(text)
Теперь существует множество различных событий (>50), которые динамически тестируются на большом дереве объектов, как показано в принципе в приведенном выше примере.
Если бы я добавил все возможные события в абстрактный базовый класс, я бы получил хорошие подсказки по типу и завершению кода в PyCharm и посмотрел, какие события возможны для объекта. Но система событий будет вызывать существующий метод в абстрактном базовом классе для каждого объекта.
Мой вопрос таков:
Есть ли способ, как я могу добавить все возможные методы событий в абстрактный базовый класс, чтобы получить подсказки по типу и завершению кода, но на самом деле не добавлять функциональность в код?
Комментарии:
1. Я не уверен, что понимаю ваш вопрос. Если вы определяете свой абстрактный базовый класс, вы просто помещаете туда абстрактные методы.
2. Да, но этот метод добавит атрибут в класс. Тогда каждый объект будет иметь каждый метод события, определенный в абстрактном базовом классе.
3. Как еще, по-вашему, это могло бы сработать?
4. То , что вы пытаетесь выразить
Union[ObjectA, ObjectB]
, — это, хотя и не уверен, поможет ли это вашей конечной цели завершения кода…