Python获取静态信息

2024-04-25 01:35:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须从一个模块到另一个模块获取静态信息。我试图用我们正在记录的代码位置的信息来编写记录器。 例如,在某些文件中:

LogObject.Log('Describe error', STATIC_INFORMATION)

静态信息是类名、文件名和函数名。 我从这里得到了:

^{pr2}$

但我不想在日志记录过程中写入这些变量。我可以创建一些函数并调用它吗。例如:

LogObject.Log('Describe error', someFunction())

如何使用它获取静态信息?在


Tags: 模块文件函数代码log信息information记录
2条回答

首先,请对对象和方法使用小写名称。类定义只能使用大写名称。在

更重要的是,你希望在每个类中都有一个聪明的自省函数。在

class Loggable( object ):
    def identification( self ):
        return self.__class__.__module__, self.__class__.__name__, sys._getframe().f_code.co_name

class ARealClass( Loggable ):
    def someFunction( self ):
        logger.info( "Some Message from %r", self. identification() )

如果所有的类都是Loggable的子类,那么您将在所有类中继承这个标识函数。在

我不认为“静态”是你要找的世界。如果我没听错的话,你想写一个函数来返回调用者的文件名、类名和方法名。在

基本上,您应该使用sys.\u getframe(1)访问上一个帧,然后从那里开始工作。在

示例:

def codeinfo():
    import sys
    f = sys._getframe(1)

    filename = f.f_code.co_filename
    classname = ''

    if 'self' in f.f_locals:
        classname = f.f_locals['self'].__class__.__name__

    funcname = f.f_code.co_name

    return "filename: %s\nclass: %s\nfunc: %s" % (filename, classname, funcname)

然后从一个你可以写的方法

^{pr2}$

相关问题 更多 >