发布时间:2022-12-18 22:00
__len__(self):返回数值类型的结果,以表示容器的长度。该方法在可变容器和不可变容器中必须实现。
__getitem__(self, key):定义获取容器中指定元素的行为,相当于 self[key];当你执行 container[key] 的时候,调用的就是该方法。该方法在可变容器和不可变容器中也都必须实现。调用的时候,如果 key 的类型错误,该方法应该抛出TypeError;如果没法返回 key 对应的数值时,该方法应该抛出ValueError。注:key 可以是索引(index)
__setitem__(self, key, value):定义设置容器中指定元素的行为,相当于 self[key] = value;当你执行 self[key] = value 时,调用的是该方法。
__delitem__(self, key):定义删除容器中指定元素的行为,相当于 del self[key];当你执行 del self[key] 的时候,调用的是该方法。
__iter__(self):该方法需要返回一个迭代器(iterator)。当你执行 for x in container: 或者使用iter(container) 时,该方法被调用。
__reversed__(self):定义当被 reversed() 调用时的行为;如果想要该数据结构被內建函数 reversed() 支持,就还需要实现该方法。
__contains__(self, item):定义当使用成员测试运算符(in 或 not in)时的行为;如果定义了该方法,那么在执行 item in container 或者 item not in container 时该方法就会被调用。如果没有定义,那么Python会迭代容器中的元素来一个一个比较,从而决定返回True或者False。
__missing__(self, key):dict字典类型会有该方法,它定义了 key 如果在容器中找不到时触发的行为。比如d = {‘a’: 1}, 当你执行 d[notexist] 时,d.__missing__(‘notexist’)就会被调用。
现以构造自定义类型对象(即容器container)为例:
enumerate(container)返回索引与数值, 即 index 与 container[index], 所以你得在你的__getitem__(self, key):中定义好 container[index] 的返回值,其中 key(index) 可以是参数。
class Con:
def __init__(self, values=None):
if values is None:
self.values = []
else:
self.values = values
def __len__(self):
return len(self.values)
def __getitem__(self, key):
return self.values[key]
def __setitem__(self, key, value):
self.values[key] = value
def __delitem__(self, key):
del self.values[key]
def __iter__(self):
return iter(self.values)
c = Con([0, 1, 2, 3,4])
for i, data in enumerate(c):
print(data)
注:之所以没实现 __iter__(self):方法是因为 enumerate( c ) 中的 c 是一个可遍历对象,如果要想把 c 变成一个可迭代对象,还得实现 __iter__(self):方法。
Python中的魔法方法_AFeng521web-CSDN博客_魔法方法
(十二)Python:常见魔法方法_带翅膀的猫的博客-CSDN博客
java学习--基础知识第六天-- Eclipse断点调试、基础语法的练习
linux系统日志message 分析,企业日志分析之Linux系统message收集展示
java毕业设计——基于java+Jsp+Tomcat的牙科诊所管理系统设计与实现(毕业论文+程序源码)——牙科诊所管理系统
Go Grpc Gateway兼容HTTP协议文档自动生成网关
【PIMF】开源鸿蒙首款IDE低代码(可视化界面)入门OpenHarmony应用
SpringBoot中如何实现全链路调用日志跟踪?这种方法才叫优雅
Jetson xavier nx 入门系列——c++调用opencv,读取rtsp视频流