出于日志记录的目的,我想检索Python对象的完全限定类名.(完全限定,我的意思是类名,包括包和模块名.)
我知道x.__class__.__name__,但是有一个简单的方法来获得包和模块吗?
我正在阅读一些基本上看起来像这样的代码:
class Foo(object):
class_name = __module__.replace('_', '-')
Run Code Online (Sandbox Code Playgroud)
对我来说,这看起来很奇怪(__module__那是什么?)所以我去了看python 数据模型.快速搜索显示这__module__是类对象和函数对象的属性.但是,__module__全局命名空间中没有可用的东西(只需要通过查看它并观察NameError结果就可以轻松验证...).
我决定将其用于实现特定的行为,但作为最后的检查,我决定使用其他实现进行测试.事实证明,此代码以1执行
我的问题是这种行为是否实际上是在语言参考中的任何地方定义的.我不确定我为什么__module__要这样做,但是我可以安全地依赖于类创建命名空间,还是所有实现者都决定以同样的方式执行此操作?
1所有linux,但我怀疑这很重要......