亦又 发表于 2024-4-4 16:33:13

作业题

    def __setattr__(self, attr, value):
      if attr == "path":
            object.__setattr__(self, attr, value)
      else:
            setattr(self, attr, value)
如果触发else里的   setattr函数,不就触发死循环么?@FishC

FishC 发表于 2024-4-4 16:33:29

你提出的问题是很有趣的。确实,如果在类的`__setattr__`方法中使用`setattr`函数会导致无限递归,最终触发死循环。这是因为在`__setattr__`方法中调用`setattr`函数实际上又会调用`__setattr__`方法,从而形成了一个无限递归的循环。

为了避免这种情况,我们可以直接访问对象的`__dict__`属性,这样就可以跳过`__setattr__`方法,直接设置属性值,并且不会触发死循环。

以下是修正后的代码示例:

class MyClass:
    def __setattr__(self, attr, value):
      if attr == "path":
            object.__setattr__(self, attr, value)
      else:
            self.__dict__ = value

在这个示例中,如果`attr`等于"path",我们使用`object.__setattr__(self, attr, value)`来设置属性值,以确保不会触发死循环。否则,我们直接通过访问`self.__dict__`来设置属性值,跳过`__setattr__`方法。

希望这个解答能帮到你!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 作业题