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

Python中如何重复调用__init__方法直到满足指定条件?

你之前的写法存在逻辑问题:else分支中调用test()会创建全新的无关实例,你当前正在初始化的实例不会被赋值x属性,后续调用时会触发属性不存在的报错,还会产生大量无效的垃圾实例。

正确的实现推荐使用循环重试,逻辑稳定且不会有递归深度问题,完全满足所有要求:

import random
class Test:
    def __init__(self):
        # 循环直到生成符合要求的x
        while True:
            x = random.choice([1,2,3])
            if x != 2:
                self.x = x
                break
        print(self.x)

如果坚持要用递归实现,也不要新建实例,直接调用自身的初始化方法即可,不过该方案极端情况下可能触发递归深度限制,不推荐生产环境使用:

import random
class Test:
    def __init__(self):
        x = random.choice([1,2,3])
        if x != 2:
            self.x = x
            print(x)
        else:
            # 递归调用当前实例的初始化方法,而非新建实例
            self.__init__()

你可以用以下代码验证效果,运行不会触发断言报错:

# 批量测试1000次,所有实例的x都不会等于2
for _ in range(1000):
    obj = Test()
    assert obj.x != 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:15:03