鱼C论坛

 找回密码
 立即注册
查看: 1980|回复: 1

[已解决]__set__和__setattr__的区别和使用场景

[复制链接]
发表于 2022-6-14 15:29:30 | 显示全部楼层 |阅读模式
3鱼币
__set__和__setattr__的区别和使用场景,可以用实例介绍一下吗?感觉两个有点相像,希望能够有明白的人总结一下区别,如果有参考来源,希望注明,谢谢
最佳答案
2022-6-14 15:29:31
class AAA :
    
    def __init__(self,value,name):
        self.name = value
       
    def __setattr__(self,name, value):      ##对定义类AAA中属性的修改做出的反应
        print("__setattr__正在被调用")

    def __set__(self,instance,value):       ##对生成实例中属性修改做出的反应
        print("__set__正在被调用")
        
class Instance:
     
    x = AAA(10, 'x')
>>> a = Instance()
>>> a.x = 1
__set__正在被调用
>>> b = AAA(1,"x2")
__setattr__正在被调用
>>> b.x2 = 2
__setattr__正在被调用
>>> 

我的理解是:
__setattr__是用于定义类的内部
__set__是用于定义类所创建的实例的

最佳答案

查看完整内容

我的理解是: __setattr__是用于定义类的内部 __set__是用于定义类所创建的实例的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-14 15:29:31 | 显示全部楼层    本楼为最佳答案   
class AAA :
    
    def __init__(self,value,name):
        self.name = value
       
    def __setattr__(self,name, value):      ##对定义类AAA中属性的修改做出的反应
        print("__setattr__正在被调用")

    def __set__(self,instance,value):       ##对生成实例中属性修改做出的反应
        print("__set__正在被调用")
        
class Instance:
     
    x = AAA(10, 'x')
>>> a = Instance()
>>> a.x = 1
__set__正在被调用
>>> b = AAA(1,"x2")
__setattr__正在被调用
>>> b.x2 = 2
__setattr__正在被调用
>>> 

我的理解是:
__setattr__是用于定义类的内部
__set__是用于定义类所创建的实例的

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 11:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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