Python Django运行时错误:在_init__中调用方法会导致超过最大递归深度

Python Django运行时错误:在_init__中调用方法会导致超过最大递归深度,python,initialization,infinite-loop,django-errors,Python,Initialization,Infinite Loop,Django Errors,当实例化Register类时,我想调用password\u生成器方法,并将方法返回的值分配给password字段 当register对象被实例化时,我为什么得到 位于/寄存器的运行时错误/ 调用Python对象时超出了最大递归深度 这是密码 型号.py class Register(models.Model): created_at = models.DateTimeField(auto_now_add=True) email = models.EmailField(max_le

当实例化
Register
类时,我想调用
password\u生成器
方法,并将方法返回的值分配给
password
字段

当register对象被实例化时,我为什么得到

位于/寄存器的运行时错误/

调用Python对象时超出了最大递归深度

这是密码

型号.py

class Register(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    email = models.EmailField(max_length=120, blank=False, null=False)
    password = models.TextField(blank=False, null=False)
    firstname= models.CharField(max_length=120, blank=False, null=False)
    lastname = models.CharField(max_length=120, blank=False, null=False)
    phonenumber = models.CharField(max_length=120, blank=True, null=True)

    def __init__(self, *args, **kwargs):
        self.password = Register().password_generator()

    #Generate random login password for candidate
    def password_generator(self, size=30, chars=string.ascii_letters + string.digits + string.punctuation):
        return ''.join(random.choice(chars) for i in range(size))
来自终端的日志

控制台

  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()

如何解决这个问题?

经过多次尝试,我终于意识到我试图调用的函数位于无限循环中。要访问
password\u generator()
方法,我必须执行
Register().password\u generator()
。这也意味着调用了
\uuuu init\uuu
方法-因为
Register()
。在
\uuu init()\uuu
中,我再次调用
寄存器()。这就是它成为无限循环的原因。要解决这个问题,我们必须使用:

    def __init__(self, *args, **kwargs):
    self.password = self.password_generator()