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)

  

 

 

posted @ 2022-11-02 20:02  多测师-星sir  阅读(59)  评论(0)    收藏  举报