RecursionError: maximum recursion depth exceeded while calling a Python object(Algorithmic Change Required)

RecursionError: maximum recursion depth exceeded while calling a Python object(Algorithmic Change Required)

我正在学习 Class python 中的继承和覆盖方法。为了实现我的学习,我写了这段代码,让我更好地理解继承和覆盖是如何工作的。但是当我 运行 代码时,我遇到了这个错误 “递归错误:调用 Python 对象时超出最大递归深度”

我试图将递归限制增加到 10000,但是这样做,Python 解释器在我的本地机器上停止工作。谁能帮助我解决如何克服错误以获得预期输出的问题? 由于我是社区的新手,我可能缺乏对问题的适当介绍。请随时询问有关该问题的更多详细信息。

# Increasing Recursion Limit  
import sys  
sys.setrecursionlimit(10000)


import random
# Parent Class

class Unique_id_creator():  
    def __init__(self, birthdate, birthmonth, birthyear):  
        self.date = birthdate  
        self.month = birthmonth  
        self.year = birthyear  

    def random_digits(self):
        last_two_digits = random.randrange(10, 99)
        return self.random_digits()

    def unique_id(self):
        id = int(self.date + self.month + self.year + self.random_digits())
        return self.unique_id()

# Child Class
class Unique_id_distributer(Unique_id_creator):  
    def __init__(self, name, birthdate, birthmonth, birthyear):  
        Unique_id_creator.__init__(self, birthdate, birthmonth, birthyear)  
        self.name = name  

    def unique_id(self):
        Unique_id_creator.unique_id(self)
        return "Dear "+ str(self.name) + ", Your Unique Id is: "+ str(self.unique_id())

citizen1 = Unique_id_distributer("hasan", "01", "11", "2000")  
print(citizen1.unique_id())
# Output Window
RecursionError: maximum recursion depth exceeded while calling a Python object

这一行return self.random_digits()和这一行return self.unique_id()是无限递归循环。

我假设您打算 return 是 last_two_digitsid

当您 return 一个函数调用时,该函数必须执行 return 其调用的结果。由于您正在调用正在执行的函数,因此它会永远调用自己。

更正代码

# Increasing Recursion Limit
import sys  
sys.setrecursionlimit(10000)


import random
# Parent Class
class Unique_id_creator:  
    def __init__(self, birthdate, birthmonth, birthyear):  
        self.date = birthdate  
        self.month = birthmonth  
        self.year = birthyear  

    def random_digits(self):
        last_two_digits = random.randrange(10, 99)
        # convert to a string since you are concatenating the result
        return str(last_two_digits)

    def unique_id(self):
        id = int(self.date + self.month + self.year + self.random_digits())
        return id

# Child Class
class Unique_id_distributer(Unique_id_creator):  
    def __init__(self, name, birthdate, birthmonth, birthyear):  
        Unique_id_creator.__init__(self, birthdate, birthmonth, birthyear)  
        self.name = name  

    def unique_id(self):
        id = Unique_id_creator.unique_id(self)
        return "Dear "+ str(self.name) + ", Your Unique Id is: "+ str(id)

citizen1 = Unique_id_distributer("hasan", "01", "11", "2000")  
print(citizen1.unique_id())

此外,您可以使用 super().

消除 parent class 的完整调用

Child class 例子

# Child Class
class Unique_id_distributer(Unique_id_creator):  
    def __init__(self, name, birthdate, birthmonth, birthyear):  
        super().__init__(birthdate, birthmonth, birthyear)  
        self.name = name  

    def unique_id(self):
        id = super().unique_id()
        return "Dear "+ str(self.name) + ", Your Unique Id is: "+ str(id)