Я создаю менеджер контекста, который инициализируется / внедряется с помощью фабрики, которая создает экземпляры ресурсов, которые затем будут управляться менеджером контекста.
У меня есть две разные фабрики: Factory AsyncFactory
Где создается стандартная версия ресурса. А другой создает Asyn c версию ресурса.
На данный момент у меня есть два диспетчера контекста: ContextManager и AsyncContextManager. Глядя на мой код, я понимаю, что оба менеджера контекста init и вспомогательные функции идентичны в обеих реализациях.
Один из вариантов - создать BaseContextManager, а затем унаследовать эту общую функциональность.
Другой вариант - объединить в один менеджер контекста, который имеет enter , exit и aenter , aexit реализации метода. ie
class ContextManager
def __init__(self, a, b, c)
...
def __enter__(self):
...
def __exit__(self):
...
def __aenter__(self):
...
def __aexit__(self):
...
def helper()
...
и затем, в зависимости от того, называется ли он «с» или «асин c с», он будет работать асин c или нет.
Интересно что думают люди об этом типе Менеджера контекста. Мое первоначальное чувство, что я держу их в качестве двух менеджеров, чтобы избежать многого в одном классе, но меня интересуют другие точки зрения.