在几乎没有静态函数的类中,我通常会像这样进行日志记录:
class ClassA:
def __init__(self):
self._logger = logging.getLogger(self.__class__.__name__)
def do_something(self):
self._logger.info("Doing something")
def do_something_else(self):
self._logger.info("Doing something else.")
Run Code Online (Sandbox Code Playgroud)
在使用静态方法的类中,我一直这样做:
class ClassB:
_logger = logging.getLogger("ClassB")
@staticmethod
def do_something():
ClassB._logger.info("Doing something")
@staticmethod
def do_something_else():
ClassB._logger.info("Doing something else")
Run Code Online (Sandbox Code Playgroud)
你可以这样做,但似乎很蹩脚:
class ClassB:
@staticmethod
def do_something():
logger = logging.getLogger("ClassB")
logger.info("Doing something")
@staticmethod
def do_something_else():
logger = logging.getLogger("ClassB")
logger.info("Doing something else")
Run Code Online (Sandbox Code Playgroud)
从静态方法记录是否有更好的模式?
您可以将它们转换为类方法.
class ClassB(object):
_logger = logging.getLogger("ClassB")
@classmethod
def do_something(cls):
cls._logger.info("Doing something")
Run Code Online (Sandbox Code Playgroud)
但是请注意,当你派生ClassB
并调用时do_something
,它会得到一个不同的记录器,因为它cls
表示派生类而不是ClassB
.