【问题标题】:Setting a object property by variable ends up in an infinite loop [duplicate]通过变量设置对象属性最终陷入无限循环[重复]
【发布时间】:2019-08-27 02:17:17
【问题描述】:

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

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__)。我不知道如何设置这样的值。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

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

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

    【讨论】:

    • 啊,所以如果这是继承的,我必须在每个子类中创建一个__setattr__?我不能只在孩子身上使用它吗?
    • @Rohit: __setattr__ 像任何其他方法一样被继承。我不确定我是否理解你的问题。重点是您的__setattr__ 必须调用一个不同的 __setattr__ 才能不递归。
    猜你喜欢
    • 2022-12-05
    • 2013-10-29
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    相关资源
    最近更新 更多