在给定类型名称的情况下,是否可以获取类型对象? 因此,例如:
get_type('str') -> str
我正在构建一个dict
,将各种情况映射到一个应实例化以处理它们的类。进口所有物品似乎过大,冒着循环进口的风险。所以我想我可以用字符串指定它们,并在使用时查找类型。但是,如何查找类型?
似乎以前没有问过这个问题的可能性很小,但我已经搜索过但未找到它。
答案 0 :(得分:4)
您可以使用builtins
通过检查getattr
模块上的属性来获取内置类型:
In [665]: import builtins
In [666]: def get_type(type_name):
...: try:
...: return getattr(builtins, type_name)
...: except AttributeError:
...: return None
...:
In [667]: get_type('str')
Out[667]: str
In [668]: get_type('list')
Out[668]: list
In [669]: get_type('dict')
Out[669]: dict
FWIW,您可以通过将第三个参数传递给AttributeError
来代替getattr
捕获,该属性将在缺少属性时用作默认值(感谢@Error-提示的语法后悔):
def get_type(type_name):
return getattr(builtins, type_name, None)
要处理自定义类型,您可以查看globals
字典:
In [670]: def get_type(type_name):
...: try:
...: return getattr(builtins, type_name)
...: except AttributeError:
...: try:
...: obj = globals()[type_name]
...: except KeyError:
...: return None
...: return repr(obj) if isinstance(obj, type) else None
...:
In [671]: class B:
...: pass
...:
In [672]: get_type('B')
Out[672]: "<class '__main__.B'>"
In [673]: get_type('C') is None
Out[673]: True