You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何自定义模块的字符串输出?

如何自定义Python模块的交互式输出字符串

当在Python交互式环境里输入已导入的模块名称并回车时,默认输出是这样的:

import pandas as pd
pd

<module 'pandas' from '....'>

我想给自定义模块改写这个输出,比如实现下面的效果:

<module 'mymodule' from '....'>
my additional custom text

我之前在自定义模块mymodule里试过写这些代码,但都没效果:
第一种尝试:

def __str__():
   print('my additional custom text')

第二种尝试:

def __str__():
   return 'my additional custom text'

def __repr__():
    print("my additional custom text")
    return "my additional custom text"

虽然直接调用mymodule.__str__()能得到预期文本,但模块本身的交互式输出完全没变化。


解决方法

不能直接在模块里定义普通的__str__或__repr__函数,因为模块对象的这些特殊方法属于types.ModuleType类,得给模块对象本身绑定这些方法才行。

在你的mymodule.py里写这段代码:

import sys
import types

def module_repr():
    # 先拿到模块默认的repr输出内容
    default_repr = super(type(sys.modules[__name__]), sys.modules[__name__]).__repr__()
    # 拼接自定义文本后返回
    return f"{default_repr}\nmy additional custom text"

# 把自定义的方法绑定到当前模块对象上
sys.modules[__name__].__repr__ = types.MethodType(module_repr, sys.modules[__name__])

这样导入模块后,直接输入模块名称回车,就能得到你想要的带自定义文本的输出了。

为什么之前的方法没用?

模块对象的__repr__方法是由它的类ModuleType实现的,你在模块里定义的普通函数只是模块的属性,不会被Python当作对象的特殊方法调用。必须把函数绑定为模块对象的方法,才能覆盖默认的行为。

内容的提问来源于stack exchange,提问作者minivip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 10:20:02