python - __setattr__ 与类属性设置属性

标签 python class methods

考虑以下两个类定义,其中,为了在将值分配给属性之前进行额外的检查(例如,跟踪修改的变量、检查有效性等),我在第一个类定义中重写了 __setattr__ 方法,在第二个方法中我使用属性。

class A(object):
    def __init__(self, x):
        self.x = x

    def __setattr__(self, name, value):
        # do something
        self.__dict__[name] = value

class B(object):
    def __init__(self, x):
        self.x = x

    @property
    def x(self):
        return self.x

    @x.setter
    def x(self, v):
        # do something
        self.x = v

对我来说,他们的行为方式看起来是一样的。
两者有什么区别吗?应该首选哪一个?为什么?

最佳答案

__setattr__ 更为通用,因为无论您提供什么属性 foo,它都会针对 A().foo = 3 运行。属性 setter 特定于单个显式定义的属性,不能用于“意外”创建属性。

关于python - __setattr__ 与类属性设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52105186/

相关文章:

python - 将使用 django-wkhtmltopdf 生成的 PDF 保存到磁盘

python - 将.aiff音频文件转换为.wav

c++ - 如何初始化类的实例?

Javascript继承,成员未定义

php - 存储 PHP 类属性的最佳方式是什么?

ruby - 在 Ruby 中查找字符串中某个字符的 # 次出现

java - java中如何获取两个对象字段之间的差异

python - Pytorch:创建 bool 张量(类型:torch.ByteTensor)?

python - 无法理解另一个线程中 future.set_result 的行为

ios - 当格式说明符错误地传递给方法时如何发出警告