[Python进阶] 定制类:模拟篇

这篇具有很好参考价值的文章主要介绍了[Python进阶] 定制类:模拟篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

4.10.5 模拟篇

4.10.5.1 call

通过__call__魔法方法可以像使用函数一样使用对象。通过括号的方式调用,也可以像函数一样传入参数:

from icecream import ic


class Multiplier:
    def __init__(self, mul):
        self.mul = mul

    def __call__(self, arg):
        return self.mul * arg


o = Multiplier(3)
ic(o(4))

11:15:45|> o(4): 12

4.10.5.2 len

当我们对某个自定义对象使用len函数时,其实就是在调用这个魔术方法。

from icecream import ic


class MyList:
    def __init__(self, data):
        self._data = data

    def __len__(self):
        return len(self._data)


x = MyList([1, 2, 3])
ic(len(x))
if x:
    ic('OK')

11:23:21|> len(x): 3
11:23:21|> ‘OK’

当我们用自定义的对象作为判断条件时,如果我们的自定义对象中没有定义__bool__魔术方法,那么会通过__len__魔术方法进行判断,不为空则返回True。

4.10.5.3 getitemsetitem

当我们尝试用[]的形式调用或赋值对象中的元素时会用调用这两个魔术方法:

from icecream import ic


class MyList:
    def __init__(self, data):
        self._data = data

    def __getitem__(self, key):
        return self._data[key]

    def __setitem__(self, key, value):
        self._data[key] = value


x = MyList([1, 2, 3])
ic(x[2])
x[2] = 5
ic(x[2])

14:48:12|> x[2]: 3
14:48:13|> x[2]: 5

4.10.5.4 delitem

在del obj[n]时会调用这个魔术方法。

from icecream import ic


class MyList:
    def __init__(self, data):
        self._data = data

    def __getitem__(self, key):
        return self._data[key]

    def __delitem__(self, key):
        self._data = self._data[0:key] + self._data[key + 1:]


x = MyList([1, 2, 3])
ic(x[1])
del x[1]
ic(x[1])

14:55:20|> x[1]: 2
14:55:20|> x[1]: 3

4.10.5.5 reversed

reversed:reverse(obj)
当用Python内置的函数reverse对象时会调用对象内的该方法。

from icecream import ic


class MyList:
    def __init__(self, data):
        self._data = data

    def __getitem__(self, key):
        return self._data[key]

    def __reversed__(self):
        return MyList(self._data[::-1])


x = MyList([1, 2, 3])
ic(reversed(x)._data)

15:03:55|> reversed(x)._data: [3, 2, 1]

4.10.5.6 contains

contains:item in obj
做in操作时会调用该方法。

from icecream import ic


class MyList:
    def __init__(self, data):
        self._data = data

    def __contains__(self, item):
        return item in self._data


x = MyList([1, 2, 3])
ic(1 in x)
ic(4 in x)

15:05:22|> 1 in x: True
15:05:22|> 4 in x: False

4.10.5.7 iter

iter:iter(obj)
返回对象的迭代器(iter)时会调用该方法。

4.10.5.8 missing

这个魔术方法必须是Python的字典类型数据的子类中才有作用。当在字典中找一个key而找不到时,会调用这个方法。

from icecream import ic


class MyDict(dict):
    def __missing__(self, key):
        return 1


d = MyDict()
ic(d[0])

15:10:06|> d[0]: 1

4.10.5.9 enterexit

这两个魔术方法和上下文管理器有关,在之前的章节中已经详细介绍了。这里就不赘述了。文章来源地址https://www.toymoban.com/news/detail-660013.html

到了这里,关于[Python进阶] 定制类:模拟篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 18 Linux之Python定制篇-Python开发平台Ubuntu

    学习视频来自于B站【小白入门 通俗易懂】2021韩顺平 一周学会Linux。 可能会用到的资料有如下所示,下载链接见文末: 《鸟哥的Linux私房菜 基础学习篇 第四版》 1 《鸟哥的Linux私房菜 服务器架设篇 第三版》 2 《韩顺平_2021图解Linux全面升级》 3   在之前“Linux入门”一章中

    2024年02月10日
    浏览(52)
  • 使用Python爬虫定制化开发自己需要的数据集

    在数据驱动的时代,获取准确、丰富的数据对于许多项目和业务至关重要。本文将介绍如何使用Python爬虫进行定制化开发,以满足个性化的数据需求,帮助你构建自己需要的数据集,为数据分析和应用提供有力支持。 1.确定数据需求和采集目标 在开始定制化开发之前,首先需

    2024年02月10日
    浏览(48)
  • Python进阶知识(一)

    最简单的模块化方式,你可以把函数、类、常量拆分到不同的文件,把它们放在同一个文 件夹,然后使用 from your_file import function_name, class_name 的方式调 用。之后,这些函数和类就可以在文件内直接使用了。 看看上面的示例代码,get_sum() 函数定义在 utils.py,Encoder 和 Decoder

    2024年02月10日
    浏览(34)
  • Python进阶知识(四)

    在Python中, concurrent.futures 模块提供了一种简单而强大的并发编程方式,称为\\\"Futures\\\"。它基于线程池( ThreadPoolExecutor )和进程池( ProcessPoolExecutor )的概念,使并发任务的管理和执行更加方便。 使用 concurrent.futures 模块,你可以将任务提交给执行器(Executor),然后通过 Fu

    2024年02月11日
    浏览(37)
  • Python进阶知识(三)

    在Python中,迭代器(Iterator)是一种用于遍历集合元素的对象。它是一个实现了迭代器协议(Iterator Protocol)的对象,该协议包含两个方法: __iter__ 和 __next__ 。 __iter__ 方法:返回迭代器对象自身。它在迭代开始之前被调用,用于初始化迭代器的状态。 __next__ 方法:返回迭代

    2024年02月10日
    浏览(39)
  • Python进阶知识(二)

    Python装饰器是一种用于修改函数或类的行为的特殊语法构造。装饰器允许在不修改原始代码的情况下,通过将函数或类包装在另一个函数中来添加额外的功能。 装饰器通常用于以下场景: 函数的日志记录:装饰器可以用来记录函数的调用信息,如函数名称、参数和返回值等

    2024年02月10日
    浏览(35)
  • 学习C++:C++进阶(六)如何在C++代码中调用python类,实例化python中类的对象,如何将conda中的深度学习环境导入C++项目中

    目录 1.应用场景 2.场景:利用maskrcnn深度学习网络实现语义分割 3.CMake配置python解释器

    2023年04月22日
    浏览(42)
  • Python小知识 - Python爬虫进阶:如何克服反爬虫技术

    Python爬虫进阶:如何克服反爬虫技术 爬虫是一种按照一定的规则,自动抓取网页信息的程序。爬虫也叫网页蜘蛛、蚂蚁、小水滴,是一种基于特定算法的自动化程序,能够按照一定的规则自动的抓取网页中的信息。爬虫程序的主要作用就是从一个网站或者一个网页中抓取所需

    2024年02月09日
    浏览(43)
  • Python进阶知识:整理1 -> pySpark入门

    pySpark大数据分析过程分为3步: 数据输入、数据计算、数据输出 ,以下内容将重点介绍这三个过程   在数据输入完成后,都会得到一个 RDD类的对象 (RDD全称为弹性分布式数据集) map算子是将RDD的数据进行一条条处理(处理的逻辑基于map算子接收的处理函数),返回新的R

    2024年01月18日
    浏览(44)
  • Python基础知识进阶之数据爬虫

           爬虫是指利用网络抓取模块对某个网站或者某个应用中有价值的信息进行提取。还可以模拟用户在浏览器或者APP应用上的操作行为,实现程序自动化。简单来说就是我们把互联网有价值的信息都比喻成大的蜘蛛网,而各个节点就是存放的数据,而蜘蛛网的上蜘蛛比喻

    2024年02月09日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包