相关疑难解决方法(0)

在Python中获取对象的完全限定类名

出于日志记录的目的,我想检索Python对象的完全限定类名.(完全限定,我的意思是类名,包括包和模块名.)

我知道x.__class__.__name__,但是有一个简单的方法来获得包和模块吗?

python python-datamodel

125
推荐指数
9
解决办法
7万
查看次数

是否保证在创建类时定义"__module__"?

我正在阅读一些基本上看起来像这样的代码:

class Foo(object):
    class_name = __module__.replace('_', '-')
Run Code Online (Sandbox Code Playgroud)

对我来说,这看起来很奇怪(__module__那是什么?)所以我去了看python 数据模型.快速搜索显示这__module__是类对象和函数对象的属性.但是,__module__全局命名空间中没有可用的东西(只需要通过查看它并观察NameError结果就可以轻松验证...).

我决定将其用于实现特定的行为,但作为最后的检查,我决定使用其他实现进行测试.事实证明,此代码以1执行

  • Cpython 2.7.6
  • Cpython 3.4.0
  • jython 2.5.3
  • PyPy 2.2.1(Python 2.7.3)

我的问题是这种行为是否实际上是在语言参考中的任何地方定义的.我不确定我为什么__module__要这样做,但是我可以安全地依赖于类创建命名空间,还是所有实现者都决定以同样的方式执行此操作?

1所有linux,但我怀疑这很重要......

python python-internals

12
推荐指数
1
解决办法
1264
查看次数