首页 > 解决方案 > 通过变量设置对象属性最终陷入无限循环

问题描述

我正在尝试创建一个简单的模型库

class Model:

    _fields = {}

    def __init__(self, **props):
        import pdb; pdb.set_trace()
        for key, value in props.items():
            if key in self._fields:
                setattr(self, key, value)

    def __setattr__(self, name, value):
        if name not in self._fields:
            return
        setattr(self, name, value)

但是,当我设置_fields列表中的值时,它会进入无限循环(setattr调用__setattr__)。我不知道如何设置这样的值。

标签: pythonpython-3.x

解决方案


解释一下文档__setattr__,如果__setattr__需要设置属性,可以通过调用基类的__setattr__方法来避免递归:

object.__setattr__(self, name, value)

# Or ...
super().__setattr__(self, name, value)

推荐阅读