鱼C论坛

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

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

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

  8.     def __set__(self,instance,value):       ##对生成实例中属性修改做出的反应
  9.         print("__set__正在被调用")
  10.         
  11. class Instance:
  12.      
  13.     x = AAA(10, 'x')
复制代码

  1. >>> a = Instance()
  2. >>> a.x = 1
  3. __set__正在被调用
  4. >>> b = AAA(1,"x2")
  5. __setattr__正在被调用
  6. >>> b.x2 = 2
  7. __setattr__正在被调用
  8. >>>
复制代码


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

最佳答案

查看完整内容

我的理解是: __setattr__是用于定义类的内部 __set__是用于定义类所创建的实例的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  8.     def __set__(self,instance,value):       ##对生成实例中属性修改做出的反应
  9.         print("__set__正在被调用")
  10.         
  11. class Instance:
  12.      
  13.     x = AAA(10, 'x')
复制代码

  1. >>> a = Instance()
  2. >>> a.x = 1
  3. __set__正在被调用
  4. >>> b = AAA(1,"x2")
  5. __setattr__正在被调用
  6. >>> b.x2 = 2
  7. __setattr__正在被调用
  8. >>>
复制代码


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

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-3 12:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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