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

如何让Python函数返回的类实例支持元组式解构赋值?

实现支持元组解构的类实例

要让自定义类的实例既能保留属性访问能力,又支持元组式解构赋值,核心是在类中实现**__iter__方法**——Python的解构赋值会自动遍历实例的迭代器,按迭代顺序提取元素完成赋值。

示例实现

我们可以模仿scipy.stats.Ttest_indResult,写一个具备相同特性的自定义结果类:

class CustomTestResult:
    def __init__(self, statistic, pvalue):
        self.statistic = statistic  # 统计量属性
        self.pvalue = pvalue        # p值属性

    def __iter__(self):
        # 按解构需要的顺序返回属性值,yield的顺序就是解构时的赋值顺序
        yield self.statistic
        yield self.pvalue

# 模拟返回该类实例的函数
def custom_test():
    # 模拟计算得到的结果
    return CustomTestResult(2.34, 0.02)

# 方式1:直接访问实例属性
res = custom_test()
t = res.statistic
p = res.pvalue
print(f"属性访问:t={t}, p={p}")

# 方式2:元组式解构赋值
t, p = custom_test()
print(f"解构赋值:t={t}, p={p}")

原理说明

  • 执行t, p = res时,Python会自动调用res.__iter__()获取迭代器,依次取出迭代器中的元素完成赋值。
  • 解构的顺序完全由__iter__方法中yield的顺序决定,和属性的命名没有关系。
  • 除了用yield实现迭代器,也可以直接返回元组/列表的迭代器,比如return iter((self.statistic, self.pvalue)),效果完全一致。

类型验证

运行代码后打印type(res),会得到<class '__main__.CustomTestResult'>,确认这是自定义类的实例,而非元组,但完全支持元组式解构。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:26:14