只在属性不存在时使用__setattr__

5 投票
2 回答
5688 浏览
提问于 2025-04-16 20:28

如果在一个类里重写了魔法方法 __getattr__,那么只有在找不到某个属性的时候,这个重写的方法才会被调用;如果属性存在,就会执行默认的行为。

但是对于 __setattr__ 来说,情况就不一样了,它会影响到所有的属性。

我想要的是一种行为:当属性存在时,正常处理;当属性不存在时,执行一些自定义的代码。还有,怎么在 __setattr__ 中调用 super 呢?

2 个回答

7

当然可以!请看下面的内容:

在编程中,有时候我们需要把一些数据从一个地方传到另一个地方。这个过程就像把水从一个水壶倒到另一个水壶一样。我们可以使用不同的方法来完成这个任务,比如通过函数、变量或者其他工具。

有些时候,数据在传输的过程中可能会出现问题,就像水壶的嘴太小,水倒不出来一样。这时候我们就需要找到解决办法,确保数据能够顺利地传递。

此外,编程中还有很多不同的语言和工具,每种都有自己的特点和用法。就像不同的水壶有不同的形状和材质,但最终都是用来装水的。

总之,理解数据如何在程序中流动是编程的基础,掌握这些基本概念后,你会发现编程其实并没有那么复杂。

希望这些解释能帮助你更好地理解编程的基本概念!

class ClassName(object):
    def __setattr__(self, name, value)
        if hasattr(self, name):
            super(ClassName, self).__setattr__(name, value)
        else:
            magic
2

你可以使用一个自定义的 __getattr__ 方法来检查某个属性是否存在。

如果你想用默认的方式来设置这个属性,可以参考这样做

object.__setattr__(self, name, value)

撰写回答