鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 亦又

疑问

[复制链接]
发表于 2024-4-11 10:50:07 | 显示全部楼层
亦又 发表于 2024-04-11 10:44
__setattr__()  与__set__()的区别?@FishC


在Python中,`__setattr__()`和`__set__()`是两个特殊的方法,用于在类中设置属性的值。

`__setattr__()`是一个特殊的方法,在给实例属性赋值时会被调用。它接受两个参数,第一个参数是要设置值的属性名称,第二个参数是要设置的属性值。在`__setattr__()`方法内部,你可以自定义逻辑来对属性值进行处理或限制。

下面是一个简单的例子,演示了如何使用`__setattr__()`方法:
class MyClass:
    def __setattr__(self, name, value):
        if name == "my_attribute":
            self.my_attribute = value * 2
        else:
            super().__setattr__(name, value)

obj = MyClass()
obj.my_attribute = 10
print(obj.my_attribute) # 输出 20

`__set__()`是另一个特殊方法,它在定义描述符时使用。描述符是一种有助于属性管理的技术,它允许你在属性获取、设置或删除时执行自定义的操作。描述符对象必须实现`__get__()`、`__set__()`和`__delete__()`方法中的至少一个。

这里展示一个描述符的例子,其中使用了`__set__()`方法:
class DoubleValue:
    def __set__(self, instance, value):
        instance.__dict__["my_attribute"] = value * 2

class MyClass:
    my_attribute = DoubleValue()

obj = MyClass()
obj.my_attribute = 10
print(obj.my_attribute) # 输出 20

总结起来,`__setattr__()`是一个对象级别的方法,用于设置对象的属性值;而`__set__()`是一个描述符方法,用于设置描述符的属性值。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 08:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表