如何修改Python中类的打印格式,仅显示类名而非完整模块路径?
解决方法
可以通过自定义元类修改类被打印时的输出格式。Python里的类本身是type的实例,默认的type.__repr__会输出带完整模块路径的格式,重写元类的__repr__方法后,使用该元类的类在打印时只会显示类名。
示例代码
class SimpleReprMeta(type): def __repr__(cls): # 仅返回类名,去除模块路径前缀 return cls.__name__ # 用自定义元类定义类 class Foo(metaclass=SimpleReprMeta): pass # 多层模块下的类(比如位于a.b.c.d.e模块中) class Bar(metaclass=SimpleReprMeta): pass # 测试打印效果 print(Foo) # 输出: Foo print(Bar) # 输出: Bar
如果想让所有类都生效(不推荐,会影响内置类和第三方库类),可以直接修改type的__repr__:
original_type_repr = type.__repr__ type.__repr__ = lambda cls: cls.__name__ # 测试内置类 print(str) # 输出: str print(list) # 输出: list
临时查看类名的话,也可以直接访问类的__name__属性:
print(Foo.__name__) # 输出: Foo
内容的提问来源于stack exchange,提问作者JRR
相关产品推荐
相关产品推荐

