广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python学习【魔术方法】
  • 668
分享到

Python学习【魔术方法】

魔术方法Python 2023-01-31 01:01:16 668人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

魔术方法 python中,所有以双下划线“__”包围的方法(即定义在类中的函数)为魔术方法Magic Method。 构造和初始化 在使用classname()创造实例化对象时,会依次执行__new__和__init__两个方法。 __

魔术方法

python中,所有以双下划线“__”包围的方法(即定义在类中的函数)为魔术方法Magic Method。

构造和初始化

在使用classname()创造实例化对象时,会依次执行__new__和__init__两个方法。

__new__是用来创建类并返回这个类的实例(一般)

__init__只是将传入的参数来初始化该实例,称为**构造方法**

__del__在释放对象时调用,称为**析构方法**

控制访问

__getattr__(self,item):访问不存在属性时调用的方法。(item为属性名)

__getattribute__(self,item):访问属性就会调用(无论item属性是否存在)。

object类中在getattribute方法中调用gettattr方法。

__setattr__(self, key, value):使用'='对属性(不存在则创建)进行赋值时调用的方法。

每次利用‘=’为对象的属性赋值时都会调用__setattr__方法。
所以该方法中不能出现self.key=value类似直接对对象属性进行赋值的语句,否则会产生无限递归。

如果要实现self.key=value的逻辑
可以采用self.__dict__[key]=value的方式,避免直接对属性赋值产生递归。

__delattr__:在删除属性时调用的方法。

自定义容器

Python内置的魔术方法,可以使得用户自定义的类具有与常见容器数据类型类似的行为特性。
常见容器数据类型包括(列表/元组/集合/字典/字符串等)

__len__(self):返回容器的长度。

__getitem__(self, key):利用索引访问容器内元素时调用的方法。(即self[key])

__setitem__(self, key, value):利用索引赋值时调用的方法。(即self[key]=value)

__delitem__(self, key):利用索引删除容器内元素时调用的方法。(即del self[key])

__iter__(self):返回一个迭代器,内置iter()进行调用或使用for循环遍历时调用,必须定义返回self的__iter__方法。

__reversed__(self):当调用reversed()时调用的方法,应返回有序序列的倒序。

__contains__(self, item):进行in 或not in时调用的方法,如果不定义会迭代容器中的元素来判断返回True或者False。

__missing__(self, key):key在容器中找不到时调用。(字典类型中含有该方法)

可调用对象

__call__(self, *args, **kwargs):当对象被作为函数进行调用时调用的方法。

上下文管理

with声明引入新的代码块

__enter__(self):with引入代码块开始时调用的方法。

返回值与with语句的目标或者as后的名字绑定

__exit__(self, exc_type, exc_val, exc_tb):代码块结束或被终止时调用的方法。

当代码块执行正常, exc_type, exc_val, exc_tb均为None。

深浅拷贝

__copy__(self):当对实例化对象进行copy.copy()时调用的方法。

浅拷贝是相当于引用原对象的数据,对浅拷贝对象数据的修改,会影响到原来的数据。

__deepcopy__(self, memodict={}):当对实例化对象进行copy.deepcopy()时调用的方法。

深拷贝是将对象及其数据全拷贝一份,对深拷贝对象数据的修改,不会影响原数据。

其他常见方法

用于比较的魔术方法

__cmp__(self, other)    是比较方法里面最基本的的魔法方法

__eq__(self, other) 定义相等符号的行为,==

__ne__(self,other)  定义不等符号的行为,!=

__lt__(self,other)  定义小于符号的行为,<

__gt__(self,other)  定义大于符号的行为,>

__le__(self,other)  定义小于等于符号的行为,<=

__ge__(self,other)  定义大于等于符号的行为,>=

数值计算的魔术方法

单目运算符和函数
__pos__(self)   实现一个取正数的操作

__neg__(self)   实现一个取负数的操作

__abs__(self)   实现一个内建的abs()函数的行为

__invert__(self)    实现一个取反操作符(~操作符)的行为

__round__(self, n)  实现一个内建的round()函数的行为

__floor__(self) 实现math.floor()的函数行为

__ceil__(self)  实现math.ceil()的函数行为

__trunc__(self) 实现math.trunc()的函数行为

双目运算符或函数

__add__(self, other)    实现一个加法

__sub__(self, other)    实现一个减法

__mul__(self, other)    实现一个乘法

__floordiv__(self, other)   实现一个“//”操作符产生的整除操作()

__div__(self, other)    实现一个“/”操作符代表的除法操作

__truediv__(self, other)    实现真实除法

__mod__(self, other)    实现一个“%”操作符代表的取模操作

__divmod__(self, other) 实现一个内建函数divmod()

__pow__ 实现一个指数操作(“**”操作符)的行为

__lshift__(self, other) 实现一个位左移操作(<<)的功能

__rshift__(self, other) 实现一个位右移操作(>>)的功能

__and__(self, other)    实现一个按位进行与操作(&)的行为

__or__(self, other) 实现一个按位进行或操作的行为

__xor__(self, other)    __xor__(self, other)

增量运算

__iadd__(self, other)   加法赋值

__isub__(self, other)   减法赋值

__imul__(self, other)   乘法赋值

__ifloordiv__(self, other)  整除赋值,地板除,相当于 //= 运算符

__idiv__(self, other)   除法赋值,相当于 /= 运算符

__itruediv__(self, other)   真除赋值

__imod_(self, other)    模赋值,相当于 %= 运算符

__ipow__    乘方赋值,相当于 **= 运算符

__ilshift__(self, other)    左移赋值,相当于 <<= 运算符

__irshift__(self, other)    左移赋值,相当于 >>= 运算符

__iand__(self, other)   与赋值,相当于 &= 运算符

__ior__(self, other)    或赋值

__ixor__(self, other)   异或运算符,相当于 ^= 运算符

类型转换

__int__(self)   转换成整型

__long__(self)  转换成长整型

__float__(self) 转换成浮点型

__complex__(self)   转换成 复数型

__oct__(self)   转换成八进制

__hex__(self)   转换成十六进制

__index__(self) 如果你定义了一个可能被用来做切片操作的数值型,你就应该定义__index__

__trunc__(self) 当 math.trunc(self) 使用时被调用__trunc__返回自身类型的整型截取

__coerce__(self, other) 执行混合类型的运算

参考博客:
https://www.cnblogs.com/pyxiaomangshe/p/7927540.html
Https://blog.csdn.net/may_xu_/article/details/81513170

--结束END--

本文标题: Python学习【魔术方法】

本文链接: https://www.lsjlt.com/news/184561.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python学习【魔术方法】
    魔术方法 Python中,所有以双下划线“__”包围的方法(即定义在类中的函数)为魔术方法Magic Method。 构造和初始化 在使用classname()创造实例化对象时,会依次执行__new__和__init__两个方法。 __...
    99+
    2023-01-31
    魔术 方法 Python
  • Python学习之魔法方法
      Python中会看到前后都加双下划线的函数名,例如 __init__(self),这类写法在Python中具有特殊的含义。如果对象使用了这类方法中的某一个,那么这个方法将会在特殊的情况下被执行,然而几乎不会直接调用此类方法。 如果没...
    99+
    2023-01-30
    方法 魔法 Python
  • PHP中的魔术方法和学习笔记
    在PHP中,魔术方法(Magic Methods)是一组特殊的方法,它们以双下划线(__)作为前缀,用于在类中实现一些特殊的行为和功能。这些方法会在特定的情况下自动调用,而不需要我们显式地调用它们。在...
    99+
    2023-10-07
    php 学习 笔记
  • python中魔术方法简述
    魔术方法:***实例化:new :实例化一个对象 方法很少使用,一般使用return super().))new(cls)基类ibject方法来创建实例并返回。 hash:返回一个整数,如果定义这个方法该类的实例就可hash。eq:...
    99+
    2023-01-31
    魔术 方法 python
  • python中类的魔术方法
    目的:学习python中class的magic methods,提高编程效率。环境:ubuntu 16.4   python 3.5.2在学习class时一定会接触到它的magic methods,比如常用__init__,形式都是前后有双...
    99+
    2023-01-31
    魔术 方法 python
  • python魔术方法是什么
    这篇文章主要介绍“python魔术方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python魔术方法是什么”文章能帮助大家解决问题。一、三个内置函数@classmethod&nda...
    99+
    2023-06-26
  • python魔术方法有哪些
    python魔术方法有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、类和对象通俗理解:类就是模板,对象就是通过模板创造出来的物体类(Class)由3个部...
    99+
    2023-06-15
  • python如何使用魔术方法
    这篇文章主要为大家展示了“python如何使用魔术方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何使用魔术方法”这篇文章吧。魔术方法魔术方法可...
    99+
    2022-10-19
  • python深入讲解魔术方法
    目录一、python内置的基本魔术方法二、python中容器类型的的魔术方法三、python中算数运算符的魔术方法什么是魔术方法(魔法方法/特殊方法) 魔术方法都不需要手动去调用是在...
    99+
    2022-11-11
  • python魔术方法之装饰器
    三个魔术方法:__get__()__set__()__delete__()object.__get__(self,实例名,owner)    #owner = 属主 ,instance = 属主类owner的实例object.__set__...
    99+
    2023-01-31
    魔术 方法 python
  • 介绍Python的魔术方法 - Mag
    前言 在Python中,所有以__双下划线包起来的方法,都统称为"魔术方法"。比如我们接触最多的__init__. 有些魔术方法,我们可能以后一辈子都不会再遇到了,这里也就只是简单介绍下; 而有些魔术方法,巧妙使用它可以构造出非常优美的代...
    99+
    2023-01-31
    魔术 方法 Python
  • Python学习之魔法函数(filter,map,reduce)详解
    目录filter() 函数map() 函数reduce() 函数filter() 函数 小实战今天的这一章节我们来学习一下,Python 中的三个高级函数,也被称之为 魔法...
    99+
    2022-11-13
  • python进阶之魔术方法详解
    目录一、三个内置函数二、双下划线开头和结尾的方法,叫魔术方法。总结一、三个内置函数 1、@classmethod–类名.属性名 2、@staticmethod&ndash...
    99+
    2022-11-12
  • Python魔术方法深入分析讲解
    目录前言__init____new____call____del____str__总结前言 魔术方法就是一个类/对象中的方法,和普通方法唯一的不同是:普通方法需要调用,而魔术方法是在...
    99+
    2023-02-08
    Python魔术方法 Python魔术方法原理
  • python中有哪些常用的魔术方法
    这篇文章将为大家详细讲解有关python中有哪些常用的魔术方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比...
    99+
    2023-06-14
  • python类之特殊属性和魔术方法
    1 总述 属性 含义 _name_ 类,函数,方法等的名字 _module_ 类定义所现在的模块名 _class_ 对象或类所属的类 _bases_ 类的基类的元素,顺序为他们在基类列表中出现的顺序 _doc...
    99+
    2023-01-31
    魔术 属性 方法
  • Python中魔术方法的特点是什么
    这期内容当中小编将会给大家带来有关Python中魔术方法的特点是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、l...
    99+
    2023-06-14
  • PHP函数的魔术方法
    PHP是一种基于C语言开发的服务器端脚本语言,它在Web开发中广泛应用。而函数是程序中最基本、最常用的组成部分之一,PHP也提供了许多与函数相关的魔术方法,可以帮助开发者更好地利用函数的优势。在本文中,我们将介绍PHP函数的魔术方法及其用法...
    99+
    2023-05-19
    函数 PHP 魔术方法
  • php 之魔术方法详解
    ✨ 目录 🎈 构造方法 / __construct🎈 析构方法 / __destruct🎈 克隆方法 / __cloneἸ...
    99+
    2023-08-31
    php 开发语言 魔术方法 面向对象 经验分享
  • PHP有哪些魔术方法
    这篇文章主要为大家展示了“PHP有哪些魔术方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“PHP有哪些魔术方法”这篇文章吧。PHP是一门非常优秀的脚本编程语言,与其它编程语言有一个非常不同的地...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作