day30 item系列
2024-09-10 22:33:34
item 会将数据操作类似于字典的操作
具体用到的方法
__getitem__(self, item):
__setitem__(self, key, value):
__delitem__(self, key):
__delattr__(self, item):
ps: 这些方法外部都是无法调用的 内部原理:
class Foo:
def __init__(self,name,age,sex): # 初始化方法,构造方法
self.name = name
self.age = age
self.sex = sex def __getitem__(self, item):
if hasattr(self,item):
return self.__dict__[item] def __setitem__(self, key, value):
self.__dict__[key] = value def __delitem__(self, key):
del self.__dict__[key] def __delattr__(self, item): # 本身就已经实现了,object类原生支持,其他则需要自己实现
del self.__dict__[item] # 原生就是 f.的方式删除 f = Foo("suyang",2,"SB")
print(f["name"]) f["hobby"] = "egg"
print(f["hobby"]) del f["hobby"]
print(f.__dict__)
正常操作的表象:
class Foo():
def __init__(self,name,age):
self.name = name
self.age = age a = Foo("yangtuo",18) # 本质上内部执行了 __init__ 方法
print(a.__dict__) # {'name': 'yangtuo', 'age': 18}
a.hobby = "play" # 本质内部执行的是 __setitem__
print(a.hobby) # 本质上是内部执行了 __getitem__
del a.hobby # 本质上内部执行了 __delattr__
print(a.hobby) # AttributeError: 'Foo' object has no attribute 'hobby'
最新文章
- C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”
- iOS - 模态Model视图跳转和Push视图跳转的混合需求实现原理
- 转 LoadRunner 技巧之 IP欺骗 (推荐)
- java7笔记
- [.net 面向对象编程基础] (3) 基础中的基础——数据类型
- DP~数塔(hrbustoj1004)
- java基础-基本数据类型
- CPU阿甘
- Java线程池应用
- 两天三场Java实习生面试总结
- Part 30 to 31 Talking about Interfaces in c#
- magent编译安装及常见错误
- bzoj 2302: [HAOI2011]Problem c
- 一例完全理解vue 2.0 的slots 和 functional render
- oracle初级语法
- Babel 6 概述
- Nmap参考指南(Man Page)
- 《C#从现象到本质》读书笔记(四)第4章C#和面向对象
- Visual studio 离线安装
- WPF用户控件库 嵌入外部(VLC)exe
热门文章
- element vuex 语音播报
- 微信小程序日常开发中常遇到的错误代码
- Luogu P2597 [ZJOI2012]灾难
- [Oracle]如何观察Table 的各种Lock 之间的冲突
- ARM-GPIO
- 批量实现多台服务器之间ssh无密码登录的相互信任关系
- Linux下DNS服务(Bind9)之Web管理利器-NamedManager部署说明
- Linux下";负载均衡+高可用";集群的考虑点 以及 高可用方案说明(Keepalive/Heartbeat)
- Nginx入门【转】
- 个人博客作业_week3