python基础关键词触发的魔法方法
- with:
- __enter__
- __exit__
- dic={}
- 获取容器中指定元素的行为
- dic["name"] = "egon" #设置值
- __setitem__ dic["name"] #取值 __getitem__
- 类的创建
- __call__
- 对象的创建
- __new__
- # 如果在__new__中return 了字符串,那么就不会走自身的 __init__ ,而是去走 str 的__init__
- 构造方法
__init__
当一个实例被创建的时候初始化属性的方法
- 析构方法
- __del__
- # 该内存释放时触发的方法,例垃圾回收机制在回收掉一块空间时
- 取属性值
- __getattr__
- # 当使用点号获取实例属性时,如果属性不存在就自动调用__getattr__方法
- 设置属性值
- __setattr__
- # 当设置实例属性时自动调用__setattr__
删除属性
__delattr__- 访问已有属性
__getattribute__(self, name)
# 对象通过点已有属性取值时调用
- 容器长度
- __len__(self)
- # 返回容器长度
- 容器迭代器
- __iter__(self)
- # 做迭代器时必须包含此方法,尤其是当内置的iter()方法被调用的时候,以及当使用for x in container:方式循环的时候。迭代器是它们本身的对象,它们必须定义返回self的__iter__方法。
- 序列反转
- __reversed__(self)
- # 当reversed()被调用时的行为,仅当序列可以是有序的时候实现它,例如对于列表或者元组。
- 调用in和not in来测试成员是否存在的时候所产生的行为
- __contains__(self, item)
- # 如果没有定义,那么Python会迭代容器中的元素来一个一个比较,从而决定返回True或者False
- 双链序列通过key找不到容器元素触发
- __missing__(self, key)
- # dict字典类型会有该方法,它定义了key如果在容器中找不到时触发的行为。比如d = {'a': 1}, 当你执行d['name']时,d.__missing__['name']就会被调用。
- 反射
- __instancecheck__(self, instance)
- # 检查一个实例是不是你定义的类的实例
- __subclasscheck__(self, subclass)
- # 检查一个类是不是你定义的类的子类
- 复制
- __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) # 定义负号的行为:-x
- __neg__(self) # 定义正号的行为:+x
- __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__ # 实现一个指数操作(“**”操作符)的行为 或power()调用
- __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) # 执行混合类型的运算
__bytes__(self) # 被 bytes() 调用时的行为- __hash__(self) # 被 hash() 调用时的行为
__bool__(self) # 被 bool() 调用时的行为
__format__(self, format_spec) # 被 format() 调用时的行为
__repr__(self) # 被 repr() 调用时的行为- __dir__(self) # 当 dir() 被调用时的行为
未完待续....
python基础关键词触发的魔法方法的更多相关文章
- python基础第9章 魔法方法、属性和迭代器(一)
__getitem__和__setitem__: 这个方法返回与指定键想关联的值.对序列来说,键应该是0~n-1的整数,其中n为序列的长度.对映射来说,键可以是任何类型. class A : __ge ...
- Python类属性访问的魔法方法
Python类属性访问的魔法方法: 1. __getattr__(self, name)- 定义当用户试图获取一个不存在的属性时的行为 2. __getattribute__(self, name)- ...
- 【python学习笔记】9.魔法方法、属性和迭代器
[python学习笔记]9.魔法方法.属性和迭代器 魔法方法:xx, 收尾各有两个下划线的方法 __init__(self): 构造方法,创建对象时候自动执行,可以为其增加参数, 父类构造方法不会被自 ...
- python基础之序列类型的方法——字符串方法
python基础之序列类型的方法--字符串方法 Hello大家好,我是python学习者小杨同学,经过一段时间的沉淀(其实是偷懒不想更新),我终于想起了自己的博客账号,所以这次带来的是序列方法的后半部 ...
- python学习笔记之七:魔法方法,属性
在python中,有的名称会在前面和后面加上两个下划线,由这些名字组成的集合所包含的方法称为魔法方法(或者是特殊方法).如果对象实现了这些方法中的某一个,那么这个方法会在特殊的情况下(确切地说是根据名 ...
- python基础教程总结8——特殊方法,属性,迭代器,生成器,八皇后问题
1. 重写一般方法和特殊的构造方法 1.1 如果一个方法在B类的一个实例中被调用(或一个属性被访问),但在B类中没有找到该方法,那么会去它的超类A里面找. class A: ... def hello ...
- Python学习笔记:06魔法方法和迭代器
魔法方法,属性和迭代器 新式类 通过赋值语句__metaclass=true或者class NewStyle(object)继承内建类object,可以表明是新式类. 构造方法 对象被创建后,会立即调 ...
- Python笔记(二十三)_魔法方法_字符串的魔法方法
__str__和__repr__ 如果要把一个类的实例变成字符串,就需要实现魔法方法__str__()和__repr__ >>>class A: def name(self): re ...
- python基础学习笔记5--对象方法、属性和迭代器
对象方法.属性和迭代器 1.构造方法 1)构造方法和一般方法的不同点:当一个对象被创建后,会立即调用构造方法. 2)在Python中创建一个构造方法很容易,只要把init方法的名字从简单的init修改 ...
随机推荐
- MySQL 一次非常有意思的SQL优化经历:从30248.271s到0.001s
转载自:https://www.toutiao.com/i6668275333034148356 一.背景介绍 用的数据库是mysql5.6,下面简单的介绍下场景 课程表: 数据100条 学生表: 数 ...
- Win 7 x64 + Visual Studio 2015为WinXP编译可执行程序
造冰箱的大熊猫@cnblogs 2019/9/5 本文承接<Win7下使用Visual Studio为WinXP编译可执行文件>一文. - 在64位Win7(开发机)上,编写基于C的Win ...
- 一行代码加快pandas计算速度
一行代码加快pandas计算速度 DASK https://blog.csdn.net/sinat_38682860/article/details/84844964 https://cloud.te ...
- 软件构造实验二-拷贝一个c文件 将其中的关键字int替换成float
1,新建 Parser Generator 点击project --> new 2,填写工程名字 随意取一个名字 点击OK 3,点击Project选项下的 parserwizard 分析器向导选 ...
- 解决IntelliJ无法导入maven包的问题
使用如下的pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...
- java实现磁盘先来先服务算法
package demo; import java.awt.List; import java.util.ArrayList; import java.util.Arrays; public clas ...
- mysql —日志记录
日志 事务日志: transaction log 中继日志: reley log错误日志: error log 通用日志: general log 慢查询日志: slow query log 二进制日 ...
- PostgreSQL SELECT INTO和INSERT INTO SELECT 两种表复制语句
SELECT INTO和INSERT INTO SELECT两种表复制语句都可以用来复制表与表之间的数据,但是它们之间也有区别. 建表语句: bas_custom_rel表 CREATE TABLE ...
- Qt:使用Model-View,动态的加载显示数据
共有 main.cpp, Widget.h, Widget.cpp, Widget.ui, MyModel.h, MyModel.cpp 六个文件. 可从此下载整个工程文件: /Files/biao/ ...
- 使 nodejs 代码 在后端运行(forever)
情境 运行nodejs的程序,使用命令:node xxx.js,但是关掉终端,程序也关闭了,如何让node app的程序一直运行? 解决 1.安装forever npm install -g fore ...