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

如何在Python类的__init__方法内调用自身以重新生成随机数?

在RandomNumbers类的__init__中通过调用自身实现随机数重生成

要在__init__方法内部调用自身实现需求,你可以在生成随机数后检查条件,若满足等式则递归调用self.__init__()重新初始化:

import random

class RandomNumbers:
    def __init__(self):
        self.BASE_A = random.randint(2, 10)
        self.BASE_B = random.randint(2, 10)
        self.EXPONENT_N = random.randint(2, 7)
        self.EXPONENT_P = random.randint(2, 7)

        # 若满足等式,递归调用自身重新生成
        if self.BASE_A ** self.EXPONENT_N == self.BASE_B ** self.EXPONENT_P:
            self.__init__()

    def generate(self):
        return self.BASE_A, self.EXPONENT_N, self.BASE_B, self.EXPONENT_P

补充说明

递归调用构造函数虽能实现需求,但极端情况下(连续生成满足等式的组合)可能触发栈溢出。更稳妥的方式是把随机数生成逻辑抽成单独的私有方法,通过循环调用该方法重生成:

import random

class RandomNumbers:
    def __init__(self):
        self._generate_numbers()
        # 循环检查,直到生成符合要求的组合
        while self.BASE_A ** self.EXPONENT_N == self.BASE_B ** self.EXPONENT_P:
            self._generate_numbers()

    def _generate_numbers(self):
        self.BASE_A = random.randint(2, 10)
        self.BASE_B = random.randint(2, 10)
        self.EXPONENT_N = random.randint(2, 7)
        self.EXPONENT_P = random.randint(2, 7)

    def generate(self):
        return self.BASE_A, self.EXPONENT_N, self.BASE_B, self.EXPONENT_P

这种方式逻辑更清晰,也规避了递归栈溢出的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:41:03