Python - 获取静态信息

时间:2009-05-24 10:35:44

标签: python variables static

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

LogObject.Log('Describe error', STATIC_INFORMATION)

静态信息是类名,文件名和函数名。 我从中得到了它:

__file__ 
self.__class__.__name__ 
sys._getframe().f_code.co_name

但是我不想在记录期间写这个变量。我可以创建一些功能并调用它。例如:

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

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

2 个答案:

答案 0 :(得分:3)

我不认为“静态”是你正在寻找的世界。如果我理解正确,你想编写一个函数,它将返回调用者的文件名,类名和方法名。

基本上,您应该使用sys._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)

然后从某个方法你可以写

logger.info("Some message \n %s" % codeinfo())

答案 1 :(得分:2)

首先,请使用小写名称作为对象和方法。仅对类定义使用UpperCase名称。

更重要的是,你想要在每个班级都有一个聪明的内省功能。

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的子类,你将在所有类中继承这个识别函数。