__setattr__ 仅当属性不存在时

abc*_*bar 4 python

如果重写类中的魔法方法__getattr__,则仅在未找到该属性时调用被重写的方法,否则会出现默认行为。

但这似乎不是这种情况__setattr__,它会影响所有属性。

我正在寻找的是当属性存在时行为正常并在属性不存在时遵循一些自定义代码的东西。以及如何做一个呼叫super__setattr__

Flo*_*yer 5

class ClassName(object):
    def __setattr__(self, name, value)
        if hasattr(self, name):
            super(ClassName, self).__setattr__(name, value)
        else:
            magic
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`hasattr` 会咨询`__getattr__`,即它不会检查`__dict__`、`__slots__` 或其他任何东西中是否真的有这样的属性,但`self.name` 是否有效。 (2认同)

Cha*_*net 2

您可以使用自定义__getattr__来了解该属性是否存在。

要设置具有默认行为的属性,您可以执行以下操作

object.__setattr__(self, name, value)
Run Code Online (Sandbox Code Playgroud)