2024-04-25 01:35:59 发布
网友
我必须从一个模块到另一个模块获取静态信息。我试图用我们正在记录的代码位置的信息来编写记录器。 例如,在某些文件中:
LogObject.Log('Describe error', STATIC_INFORMATION)
静态信息是类名、文件名和函数名。 我从这里得到了:
但我不想在日志记录过程中写入这些变量。我可以创建一些函数并调用它吗。例如:
LogObject.Log('Describe error', someFunction())
如何使用它获取静态信息?在
首先,请对对象和方法使用小写名称。类定义只能使用大写名称。在
更重要的是,你希望在每个类中都有一个聪明的自省函数。在
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)
然后从一个你可以写的方法
首先,请对对象和方法使用小写名称。类定义只能使用大写名称。在
更重要的是,你希望在每个类中都有一个聪明的自省函数。在
如果所有的类都是Loggable的子类,那么您将在所有类中继承这个标识函数。在
我不认为“静态”是你要找的世界。如果我没听错的话,你想写一个函数来返回调用者的文件名、类名和方法名。在
基本上,您应该使用sys.\u getframe(1)访问上一个帧,然后从那里开始工作。在
示例:
然后从一个你可以写的方法
^{pr2}$相关问题 更多 >
编程相关推荐