Python中从类类型获取类名及泛型类名称的实现方法
Python 获取类名(支持普通类、继承类与泛型类)
普通类与继承类的类名获取
对于普通类和继承类,直接访问类的__name__属性就能拿到类名,这是Python原生提供的属性,完全不用字符串处理:
class Foo: pass class Bar(Foo): pass def print_class_name(klass): print(klass.__name__) print_class_name(Foo) # 输出: Foo print_class_name(Bar) # 输出: Bar
泛型类的类名解析
如果要处理泛型类(比如list[Foo]这种带类型参数的泛型),需要用到typing模块里的get_origin和get_args方法,这两个方法能帮你拆分泛型的原始类型和参数类型,同样是原生API,避免字符串操作:
from typing import get_origin, get_args def parse_generic_class(generic_type): # 获取泛型的原始类(比如list[Foo]里的list) origin_class = get_origin(generic_type) if origin_class: print(f"泛型原始类名: {origin_class.__name__}") # 获取泛型的参数类列表(比如list[Foo]里的Foo) arg_classes = get_args(generic_type) for idx, arg in enumerate(arg_classes, 1): print(f"泛型参数类名{idx}: {arg.__name__}") # 测试单参数泛型 parse_generic_class(list[Foo]) # 输出: # 泛型原始类名: list # 泛型参数类名1: Foo # 测试多参数泛型 parse_generic_class(dict[str, int]) # 输出: # 泛型原始类名: dict # 泛型参数类名1: str # 泛型参数类名2: int
内容的提问来源于stack exchange,提问作者jacob_g
相关产品推荐
相关产品推荐

