python 魔术方法:序列语义方法 __len__/__detitem__/__setitem__/__delitem__
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)

浙公网安备 33010602011771号