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

