如何将字符串类名转换为类构造器并实现类型转换函数foo
实现逻辑
核心思路是所有Python内置类(int/str/float等)都统一挂载在builtins内置模块下,优先从该模块查询构造器即可解决原有方案不支持内置类的问题。
具体实现步骤:
- 导入
builtins模块,通过getattr方法传入字符串类名获取对应的构造器对象 - 校验获取到的对象是否可调用,避免传入非法类名时抛出预期外的异常
- 调用构造器转换待处理的字符串值即可
代码实现
import builtins def foo(type_str: str, value: str): constructor = getattr(builtins, type_str, None) if not callable(constructor): raise ValueError(f"不支持的目标类型:{type_str}") return constructor(value)
效果验证
foo("int", "12")输出结果为12(整数类型)foo("str", "12")输出结果为"12"(字符串类型)foo("float", "12")输出结果为12.0(浮点数类型)
如果需要同时支持自定义类,可以扩展查询逻辑,内置类查询不到时再从当前模块检索:
import sys import builtins def foo(type_str: str, value: str): constructor = getattr(builtins, type_str, None) or getattr(sys.modules[__name__], type_str, None) if not callable(constructor): raise ValueError(f"不支持的目标类型:{type_str}") return constructor(value)
内容的提问来源于stack exchange,提问作者jeandemeusy
相关产品推荐
相关产品推荐

