python 魔术方法:序列语义方法 :
1. 作用: 自定义序列的相关魔法方法允许我们自己创建的类拥有序列的特性,让其使用起来就像 python
的内置序列(dict,tuple,list,str,set)可以被遍历的对象
2. 序列魔术方法介绍 :
用于返回序列长度:__len__
用于按下标获取序列中的元素:__getitem__
用于按下标设置序列的值:__setitem__
用于删除某个下标的元素:__delitem__
# __len__方法 的使用 class MyClass: def __init__(self,args): self.xl = list(args) def __len__(self): return len(self.xl) a = MyClass([11,22,33,44]) print(len(a))
序列语义:
class MyClass: def __init__(self,*args): self.xl = list(args) pass a = MyClass() print(a[0])
可以看到对象本身并不支持 序列的索引方法
TypeError: 'MyClass' object is not subscriptable
__getitem__方法:
class MyClass: def __init__(self,*args): self.xl = list(args) # __getitem__ 将对象变成可操作的对象 def __getitem__(self, item): return self.xl[item] a = MyClass(11,22,33,44) print( a[0] ) 输出结果 11
__setitem__ 方法:可以实现对对象的值进行修改
class MyClass: def __init__(self, *args): self.xl = list(args) # __getitem__ 将对象变成可操作的对象 def __getitem__(self, item): return self.xl[item] def __setitem__(self, key, value): self.xl[key] = value return self.xl def __str__(self): return str(self.xl) a = MyClass(11, 22, 33, 44) a[0] = 9999 print(a)
""" 输出结果:[9999, 22, 33, 44]"""
__delitem__ :实现将对象的key 删除
class MyClass: def __init__(self, *args): self.xl = list(args) # __getitem__ 将对象变成可操作的对象 def __getitem__(self, item): return self.xl[item] def __delitem__(self, key): del self.xl[key] def __str__(self): return str(self.xl) a = MyClass(11, 22, 33, 44) del a[0] print(a)
标签:__,xl,python,self,args,detitem,MyClass,def From: https://www.cnblogs.com/manxingsir/p/16852244.html