Python:从名称中获取类型对象?

标签 python types

<分区>

有没有办法在给定类型名称的情况下获取类型对象? 所以,例如:

   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/

相关文章:

c++ - 结构的 "type"是否会因计算机而异?

c# - 什么时候使用 int 与 Int32,或 string 与 String 有什么关系?

typescript - TypeScript 中可以使用编译时标记数字吗?

python - 使用 PySerial 从 Arduino 串行接收到 Raspberry Pi 一段时间后停止

python - 我需要比较同一数据框中的列并对它们进行排名

java - 链表可以存储不同的数据类型吗?

c# - double 的范围是否比 long 大?

python - 使用递归打印 n 选择 k 组合算法

python - 将正方形旋转为向量的法线

python - 从 R 到 Python 的 case_when 函数