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
相关产品推荐
相关产品推荐

