gpt4 book ai didi

python - 如何在 Python 中检测静态方法/类方法的被调用类?

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:45 25 4
gpt4 key购买 nike

我在这里发现了类似的问题,但我的问题有点不同......我在 MyUtil 类中将 log() 函数作为静态方法:

class MyUtil(object):

@staticmethod
def log(message, level):
...

但现在我必须知道这个静态方法是从哪个类/对象调用的?例如:

class Deployer(object):

def deploy(self):
...
MyUtil.log ("Starting deployment", "info")
...

是否可以从 MyUtil.log 函数获取并记录这个“Deployer”类名?

(我知道这是非常不面向对象的,并且在编写良好的程序中可能永远不会有用,但无论如何......)

最佳答案

你有没有考虑写一个像实现这样的日志记录模块。类似以下内容

创建一个单独的 Logger 类。当您需要一个记录器对象时调用 Logger.get_logger(your_class_name)。此方法要么创建一个新的记录器并将其返回,要么返回已为该特定记录器名称创建的记录器。然后使用这个记录器。

这样您就可以在需要时随时使用标准记录器更改您自己的记录器。开发人员将熟悉您正在使用的方法。

logger = Logger.get_logger(Deployer.__class__.__name__)
logger.info("Starting deployment")

这是一个非常简单的记录器实现。

"""
Sample logger implementation
"""
import datetime


class Logger:
"""
Main logger class
"""
_cached_loggers = dict()

def __init__(self, logger_name):
self.name = logger_name
self._cached_loggers[logger_name] = self

@classmethod
def get_logger(cls, logger_name):
"""
Return a new logger or already existed one
"""
if logger_name in cls._cached_loggers:
logger = cls._cached_loggers[logger_name]
else:
logger = Logger(logger_name)
return logger

def info(self, msg):
"""
logging info logs
"""
print u"{0} - {1} - {2}".format(self.name,
datetime.datetime.now(),
unicode(msg))

关于python - 如何在 Python 中检测静态方法/类方法的被调用类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12637913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com