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')

有什么想法吗?