Python 在两个 class 实现之间切换干净的代码
Python Toggle between two class implementations clean code
我想根据 os 中的环境变量在同一 class 的两个实现之间切换。
我想使用它的一种情况是,它可以在登录到远程服务器和登录到本地磁盘之间切换。
到目前为止我有以下实现:
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')
该代码不干净,尤其是当我们考虑到我会在我的项目中的每个 class 每隔几行写一次时,我最好的希望是像这样使用它:
import mode
mode.log('joy')
有什么想法吗?
因此,在研究了 python 日志记录的工作原理后,我想出了一个解决方案。
所有 class 保持不变,但 class mode
已删除,并且 mode.py 文件为:
import os
mylogger=LocalLogger() if os.getenv('key')=='value' else RemoteLogger()
@staticmethod
def log(message):
mylogger.log(message)
那我可以做:
import mode
mode.log('joy')
有什么想法吗?
我想根据 os 中的环境变量在同一 class 的两个实现之间切换。 我想使用它的一种情况是,它可以在登录到远程服务器和登录到本地磁盘之间切换。
到目前为止我有以下实现:
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')
该代码不干净,尤其是当我们考虑到我会在我的项目中的每个 class 每隔几行写一次时,我最好的希望是像这样使用它:
import mode
mode.log('joy')
有什么想法吗?
因此,在研究了 python 日志记录的工作原理后,我想出了一个解决方案。
所有 class 保持不变,但 class mode
已删除,并且 mode.py 文件为:
import os
mylogger=LocalLogger() if os.getenv('key')=='value' else RemoteLogger()
@staticmethod
def log(message):
mylogger.log(message)
那我可以做:
import mode
mode.log('joy')
有什么想法吗?