<分区>
有没有办法在给定类型名称的情况下获取类型对象? 所以,例如:
get_type('str') -> str
我正在构建一个 dict
将各种情况映射到一个应该实例化以处理它们的类。进口所有东西并冒着循环进口的风险似乎有点过分了。所以我想我可以用字符串指定它们,并在使用时查找类型。但是我如何查找类型呢?
这似乎不太可能以前没有被问过,但我已经搜索过但没有找到。
<分区>
有没有办法在给定类型名称的情况下获取类型对象? 所以,例如:
get_type('str') -> str
我正在构建一个 dict
将各种情况映射到一个应该实例化以处理它们的类。进口所有东西并冒着循环进口的风险似乎有点过分了。所以我想我可以用字符串指定它们,并在使用时查找类型。但是我如何查找类型呢?
这似乎不太可能以前没有被问过,但我已经搜索过但没有找到。
最佳答案
您可以使用 getattr
检查 builtins
模块的属性来获取内置类型:
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,您可以通过将第三个参数传递给 getattr
来替换 AttributeError
捕获,当属性丢失时,它充当默认值(感谢 @Error - Syntactical Remorse for the提醒):
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
关于Python:从名称中获取类型对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56797480/