Я хотел бы переключаться между двумя реализациями одного и того же класса в зависимости от переменной среды в ОС.В одном из случаев я хотел бы использовать его, чтобы переключаться между входом на удаленный сервер и входом на локальный диск.
На данный момент у меня есть следующая реализация:
import abc
class AbstractLogger(object):
@abc.abstractmethod
def log(message):
pass
class LocalLogger(AbstractLogger):
def __init__(self):
# open file here
def log(self, message):
print('write to file')
class RemoteLogger(AbstractLogger):
def __init__(self):
# open socket here
def log(self, message):
print('write to socket')
import os
class mode(object):
is_local=os.getenv('key')
mylogger=None
@staticmethod
def get_logger():
if mode.is_local and mode.logger is None:
mode.mylogger=LocalLogger()
else:
mode.logger=RemoteLogger()
return mode.mylogger
, тогда использование моего кода будет выглядеть следующим образом:
from mode import mode
mode.get_logger().log('write this')
или
from mode import mode
logging=mode.get_logger()
logging.log('write this')
Этот код не является чистым, особенно если учесть, что я буду писать это каждую пару строк вкаждый класс в моем проекте, я бы хотел использовать его следующим образом:
import mode
mode.log('joy')
есть идеи?