当前位置:
首页 > temp > python入门教程 >
-
__setattr__,__getattr__,__delattr__
class Foo: x = 1 def __init__(self,y): self.y = y def __getattr__(self,item): print("---->from getattr:你找的属性不存在") def __setattr__(self,key,value): print('----> from setattr') # self.key = value # 这样就无限递归 # self.__dict__[key] = value #应该这样写 def __delattr__(self,item): print("---> from delattr") # del self.item # 上面的写法同样会无限递归 self.__dict__.pop(item) def __getitem__(self,item): print('---->from getitem') def __setitem__(self,item,value): print('---from setitem') def __delitem__(self,item): print('---->from __delitem__') # __setattr__:添加/修改属性就会触发它的执行 # 写的原理就是将属性和值写进对象的底层字典中,而我们重新写了 # __setattr__ 方法,所以不会写进去底层字典。 f1 = Foo(10) f1['y'] = 10 # 触发__setitem__ 方法 print(f1.__dict__) print(f1.__dict__) f1.z = 3 # # 触发__setattr__ print(f1.__dict__) # 除非是直接对底层字典进行操作,否则我们是永远无法赋值 f1.__dict__['z'] = 3 print(f1.z) # 3 # 此时f1 就有了z 属性 # __delattr__删除属性的时候会触发 f1.__dict__['a'] = 5 print(f1.__dict__) #{'z': 3, 'a': 5} del f1.a # 触发__delattr__方法 del f1['a'] # 触发__delitem__方法 print(f1.__dict__) # {'z': 3} # __getattr__ 只有在点调用属性且属性不存在的时候才会触发 f1.anc # 打印:---->from getattr:你找的属性不存在 f1['anc'] # 打印:---->from getitem:你找的属性不存在
来源:https://www.cnblogs.com/cong12586/p/11371935.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数