【发布时间】:2015-11-26 20:00:22
【问题描述】:
我有一个名为get_full_class_name(instance) 的函数,它返回instance 的完整模块限定类名。
示例 my_utils.py:
def get_full_class_name(instance):
return '.'.join([instance.__class__.__module__,
instance.__class__.__name__])
不幸的是,当给定在当前运行的脚本中定义的类时,此函数会失败。
示例 my_module.py:
#! /usr/bin/env python
from my_utils import get_full_class_name
class MyClass(object):
pass
def main():
print get_full_class_name(MyClass())
if __name__ == '__main__':
main()
当我运行上面的脚本时,不是打印my_module.MyClass,而是打印__main__.MyClass:
$ ./my_module.py
__main__.MyClass
如果我从另一个脚本运行上述main(),我确实会得到所需的行为。
示例 run_my_module.py:
#! /usr/bin/env python
from my_module import main
if __name__ == '__main__':
main()
运行上面的脚本得到:
$ ./run_my_module.py
my_module.MyClass
有没有一种方法可以编写get_full_class_name() 函数,使其始终返回my_module.MyClass,而不管my_module 是否作为脚本运行?
【问题讨论】:
标签: python class module path introspection