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

当Python类构造函数含**kwargs时,如何实现__repr__方法?

实现Thing类的__repr__方法

要让Thing类的实例生成符合Python语法的字符串表示(可通过eval()重建实例),可以按以下方式实现__repr__方法:

实现思路

  1. 提取必选参数a和b的值,用repr()格式化以保证语法正确性;
  2. 从实例的__dict__中排除a和b,剩余属性即为通过**kwargs传入的额外参数;
  3. 将额外属性格式化为key=repr(value)的形式,对键名排序以保证输出顺序稳定;
  4. 把所有参数拼接成Thing(参数1, 参数2, 额外参数...)的格式字符串。

完整代码

class Thing:
    def __init__(self, a, b, **kwargs):
        self.a = a
        self.b = b
        self.__dict__.update(kwargs)

    def __repr__(self):
        # 处理必选参数
        param_parts = [repr(self.a), repr(self.b)]
        # 筛选并格式化额外关键字参数
        extra_attrs = {k: v for k, v in self.__dict__.items() if k not in ('a', 'b')}
        param_parts.extend(f"{key}={repr(val)}" for key, val in sorted(extra_attrs.items()))
        # 拼接最终字符串
        return f"Thing({', '.join(param_parts)})"

# 测试示例
thing1 = Thing(6, 5, color="red")
print(repr(thing1))  # 输出: Thing(6, 5, color='red')

thing2 = Thing(10, 20, size=15, shape="circle")
print(repr(thing2))  # 输出: Thing(10, 20, shape='circle', size=15)

说明

  • 使用repr()处理参数值,确保字符串、数字等类型都符合Python语法规范;
  • 对额外属性的键名排序,避免因字典插入顺序(Python3.7+为插入顺序)导致的输出不一致;
  • 生成的字符串可直接通过eval()重新创建等价实例,符合__repr__方法的设计初衷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:05:23