Python 创建个性化序列

296 阅读2分钟

image.png

「这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战

前言

继上一篇Python 魔术方法解析中,我们对 Python 常见的魔术方法,有创建类时需要用到的构造方法__init__()、析构方法__del__(),还有with上下文管理器中需要使用__enter__()进入上下文件运行时、__exi t__()退出上下文运行时操作。

Python 魔术方法,是创建定义类对象使用的,不能被单独调用。在Python解释器中,默认情况下自动执行,在需要个性化功能时,我们可以对其方法进行重写。

Python 数据类型分为可变数据类型和不可变数据类型。

image.png

对于Python 序列中,list、dict、set 属于可变序列,元组不可变序列。

当Python内置提供的序列不满足我们实际需求时,我们可以使用Python 魔法方法进行个性化容器定制。

本期,我们将学习Python 魔法方法进行个性化定制序列容器,Let‘s go~~

1. 序列相关方法

Python 序列中,最重要的特征是可包含多个元素,魔法方法有几个关于序列的方法。

  • __len__(self): 返回序列中元素的个数
  • __getitem__(self,key): 获取指定索引对应的元素。该key是整数值或者slice对象,否则该方法会引发KeyError.
  • __contains__(self,item): 判断序列是否包含指定元素
  • __setitem__(self,key,value): 设置指定索引对应的元素。该方法的key是整数值或slice对象,否则引发KeyError异常
  • __delitem__(self,key): 删除指定索引对应的元素

2. 创建可变序列

如果我们要创建可变序列时,我们需要实现如下方法:

  • 我们需要重写__len__()计算出序列个数和__getitem__()获取指定索引对应的元素。
  • 还需要重写定义__setitem__()__delitem__()
class mylist:

    def __init__(self,*args):
        self.values = [x for x in args]
        print(self.values)
        self.count = {}.fromkeys(range(len(self.values)),0)

    def __len__(self):

        return len(self.values)

    def __getitem__(self, key):

        self.count[key] +=1

        return self.values[key]

3. 创建不可变序列

Python中,我们要实现不可变序列,只需要实现两个方法:

  • __len__()
  • __getitem__()

总结

本期,我们学习使用Python 魔法方法实现个性化序列。Python 魔法方法提供关于5种方法,实现不可变序列只需要实现__len__()__getitem__()方法。

以上是本期内容,欢迎大佬们点赞评论,下期见~~