如何在Python中将完全限定的类名映射到其类对象?

Jim*_*ans 9 python introspection

您可以像这样获得Python对象的完全限定类名(请参阅此问题):

>>> import Queue
>>> q = Queue.PriorityQueue()
>>> def fullname(o):
    return o.__module__ + "." + o.__class__.__name__  
...   
>>> fullname(q)
'Queue.PriorityQueue'
>>> 
Run Code Online (Sandbox Code Playgroud)

你如何做反过来,即映射一个完全限定的类名称,如'Queue.PriorityQueue'相关的类对象(Queue.PriorityQueue)?

Ery*_*Sun 11

您可以在2.7中使用importlib:

from importlib import import_module

name = 'xml.etree.ElementTree.ElementTree'
parts = name.rsplit('.', 1)
ElementTree = getattr(import_module(parts[0]), parts[1])
tree = ElementTree()
Run Code Online (Sandbox Code Playgroud)

在旧版本中,您可以使用该__import__功能.它默认返回包导入的顶级(例如xml).但是,如果将其传递给非空fromlist,则返回指定的模块:

name = 'xml.etree.ElementTree.ElementTree'
parts = name.rsplit('.', 1)    
ElementTree = getattr(__import__(parts[0], fromlist=['']), parts[1])
tree = ElementTree()
Run Code Online (Sandbox Code Playgroud)