1、何为魔法方法:

  Python中,一定要区分开函数和方法的含义;

  1.函数:类外部定义的,跟类没有直接关系的;形式: def func(*argv):

  2.方法:class内部定义的函数(对象的方法也可以认为是属性);分为两种:

    ① python自动产生的(魔法方法):一般形式为 __func__(),python会在对应的时机自动调用该函数;

    ② 人为自定义的方法:一般和普通函数没有区别,只是定义在了class中而已

  3.方法与函数的区别:

    方法可认为是函数的特殊情况;

    ① 方法定义在class内部

    ② 方法的第一个参数应为 cls(类方法) 或者 self(实例方法)

2、魔法方法汇总:

Python 魔法方法汇总
方法 描述 备注
1、基本方法
__new__(cls[,*argv])  1. __new__ 是在一个对象实例化的时候所调用的第一个方法
2. 它的第一个参数是这个类,其他的参数是用来直接传递给 __init__ 方法
3. __new__ 决定是否要使用该 __init__ 方法,因为 __new__ 可以调用其他类的构造方法或者直接返回别的实例对象来作为本类的实例,如果 __new__ 没有返回实例对象,则 __init__ 不会被调用
4. __new__ 主要是用于继承一个不可变的类型比如一个 tuple 或者 string

cls:代表一个类的名称

self:代表一个实例对象的名称

 __init__(self[,*argv])  构造器,当一个实例对象被定义时调用 类似于C++的构造函数
 __del__(self) 析构器,当删除一个实例对象时调用 类似于C++的析构函数
 __call__(self[,*argv])  允许一个类像函数一样被调用   class_x(a,b)实际调用的是class_x.__call__(a,b)
 __len__(self) 获得实例对象的长度 与调用函数 len(obj)一样的结果
 __repr__(self) 将实例对象转化为字符串的形式

如 ls=[1,2,3], 则repr(ls)为 '[1,2,3]',与函数repr(obj)功能相同

 __str__(self)  将实例对象转化为字符串的形式

与repr()的区别在于:str(obj)的字符串是打印出来让人看的,更加亲民,而repr(obj)是给解释器看的;

若 a = xxx(列表、字典、元祖或集合等)

eval(repr(a)) == a  成立

eval(str(a)) == a    不一定成立

__int__(self) 定义当被 int() 调用时的行为  
__float__(self)  定义当被 float() 调用时的行为  
__round__(self[, n]) 当被round()调用时的行为 round(digit[, n]) 将digit数字保留n位精度
 __hash__(self) 定义能被 hash() 调用的行为  
 __bytes__(self)  定义被 bytes() 调用的行为  
 __bool__(self) 定义被 bool() 调用的行为 返回True(1) 或 False(0)
 __format__(self, form) 定义被 format()调用的行为  
2、运算符方法
 __add__(self, other) 加法:+  
__sub__(self, other) 减法:-  
__mul__(self,other) 乘法:*  
__truediv(self, other) 除法:/ 注意是 truediv
__floordiv(self, other) 整数除法://  floor()即为向下取整的意思
__mod__(self, other) 求余:%  
__pow__(self, other[, mod]) 乘方:**

pow(x,y[,z]),

若无Z,则为 return x**y

若有Z,则为 return x**y%z

__divmod__(self, other) divmode() 返回值为元祖  (商值,余数)
__lshift__(self, other) 左移:<<  
__rshift__(self, other) 右移:>>  
__and__(self, other) 按位与:& 注意以下均为按位操作,非逻辑操作
__or__(self, other) 按位或:|  
__xor__(self, other) 按位异或:^  
 3、反运算符方法  
 __radd__(self, other) 加法,如a+b,当a不支持__add__()操作时,调用此函数; 即在运算符的基础上加上 'r' 即可,以下雷同
 __rsub__(self, other) other - self  
 …………    
 4、增量赋值运算符方法  
 __iadd__(self, other) 赋值加法:+=   即在赋值运算符之前加 'i' ,以下雷同
__isub__(self, other) 赋值减法:-= self = self - other
…………    
5、一元操作符方法  
__pos__(self) 定义正号:+x  
__neg__(self) 定义负号:-x  
__abs__(self) 取绝对值  
__invert__(self) 按位求反:~x  
6、比较操作符方法  
__gt__(self, other) 大于:>  
__ge__(self, other) 大于等于:>=  
__lt__(self, other) 小于:<  
__le__(self, other) 小于等于:<=  
__eq__(self, other) 相等:==  
__ne__(self, other) 不等:!=  
7、属性操作  
__getattr__(self, name) 当用户访问一个不存在的属性时调用 注意 object/super() (所有类的基类) 是无该方法的
__getattribute(self, name) 访问存在的属性时调用 先调用此函数,如找不到该属性,再去调用上面的属性
__setattr__(self, name, value) 设置属性时调用  
__delattr__(self, name) 删除一个属性时调用  
property(fget=None, fset=None, fdel=None, doc=None) 是一个类,主要功能是为了方便类内部函数的调用
 class C(object):
def getx(self): return self._x
def setx(self, value): self._x = value
def delx(self): del self._x
x = property(getx, setx, delx, "I'm the 'x' property.") >>> c=C()
>>> c.x=10
>>> c.x
10
__get__(self, instance, owner) 描述符被访问时调用 想详细了解,请点击这里
 __set__(self, instance, value) 描述符被改变时调用  
  __delelte__(self, instance, value) 删除描述符时调用  
8、容器类型操作  
__len__(self)    求容器的大小(注意与capacity的区别) 可变和非尅便容器均具备 __len__ 和 __getitem__
__getitem__(self, key) 获取容器中指定元素的行为  
__setitem__(self, key, value) 设置容器中指定元素的行为  只有可变容器拥有 __setitem__ 和 __delitem__
__delitem__(self, key) 删除容器中指定元素的行为  
__iter__(self) 定义迭代器中元素的行为  
__reversed__(self) 当调用reversed()函数时  
__contains__(self, item) 成员运算符in/ not in的行为  
   

 PS: ①.以上所有的魔法方法,君采用__xx__形式(__为双 "_",双下划线)

   ②.以上魔法方法为Python解释器自动调用,当然也可以手动调用

   ③.魔法方法Python解释器自动给出默认的,因此除非需要改变其内部功能,其它时刻刻使用默认魔法方法

   ④.魔法方法是针对class而言的,脱离了”类“谈magic_method是没有意义的

   ⑤.*argv为可变的参数列表,类似C语言的va(variable argument),注意与指针的区别,python中暂时忘掉指针,因为python的内存机制都是解释器自动完成的

Python魔法方法总结及注意事项的更多相关文章

  1. python魔法方法:__getattr__,__setattr__,__getattribute__

    python魔法方法:__getattr__,__setattr__,__getattribute__ 难得有时间看看书....静下心来好好的看了看Python..其实他真的没有自己最开始想的那么简单 ...

  2. python魔法方法大全

    1.python魔法方法详解: python魔法方法是可以修改重载的,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而 ...

  3. python 魔法方法补充(__setattr__,__getattr__,__getattribute__)

    python 魔法方法补充 1 getattribute (print(ob.name) -- obj.func())当访问对象的属性或者是方法的时候触发 class F(object): def _ ...

  4. 1. Python 魔法方法

    Python 魔法方法 基础: 如果你想... 所以,你写... Python调用... 初始化一个实例 x = MyClass() x.__init__() 作为一个字符串的"官方&quo ...

  5. with上下文管理 python魔法方法

    with语法在Python里很常见, 主要的利好是使用代码更简洁. 常见的使用场景有: 1. 资源对象的获取与释放. 使用with可以简化try...finally ... 2. 在不修改函数代码的前 ...

  6. python 魔法方法诠释

    什么是Python魔法方法 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两个下划线包围来命名的(比如 ini ...

  7. python 魔法方法

    I am not a creator, I just a porter. Note: Everything is object in python. 对于Python来说一切都是对象,也就是函数的参数 ...

  8. python 魔法方法之:__getitem__ __setitem__ __delitem__

    h2 { color: #fff; background-color: #7CCD7C; padding: 3px; margin: 10px 0px } h3 { color: #fff; back ...

  9. python 魔法方法(学习过程的笔记)

    有小伙伴会问,什么是python的魔法方法,python的魔法方法有什么用呢, 它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两 ...

随机推荐

  1. Struts1.x 环境搭建和技术准备(上)

    Struts 1.x 基于 Servlet,Struts 2.x基于Filter 1.servlet的注解配置方式和web.xml配置方式 使用servelt 3.0,eclipse在创建seb项目是 ...

  2. 四大组件之一---------activity的知识

    activity的生命活动 activity的四种启动模式 Android中以一个任务栈用来管理activity 一个栈的形式进行管理 在清单文件中,通过<activity>标签的andr ...

  3. 解决!同一ajax请求获取的图片路劲,在谷歌浏览器能正确展示图片,在火狐浏览器则显示路径undefined

    今天的工作学习之路是解决了昨天的问题,可看我昨天的随笔了解问题. 非常感谢昨天各位积极地解答,在此我引用 @不带汽的可乐 的方法进行解决,问题其实挺简单就解决了,先说说原因,在火狐浏览器中,当我在js ...

  4. NMF和SVD在推荐系统中的应用(实战)

    本文以NMF和经典SVD为例,讲一讲矩阵分解在推荐系统中的应用. 数据 item\user Ben Tom John Fred item 1 5 5 0 5 item 2 5 0 3 4 item 3 ...

  5. iOS开发之数据存储之Preference(偏好设置)

    1.概述 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能. 每个应用都有个NSUserDefaults实例,通过它来存取偏好 ...

  6. vue学习笔记 模板语法(三)

    <div id="kk"> <div>直接输出文本:{{msg}}</div> <div>自定义过滤器输出文本:{{msg|capi ...

  7. jenkins+docker+maven+svn

    环境介绍 1.        软件需求 Jenkins  本次实验所用版本1.5.1 下载链接:https://jenkins.io/index.html Docker 本次实验所用版本 17.03. ...

  8. 老李分享:持续集成学好jenkins之Git和Maven配置 1

    老李分享:持续集成学好jenkins之Git和Maven配置   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...

  9. 老李分享:HTTP协议之请求和响应

    老李分享:HTTP协议之请求和响应   HTTP请求头详解: GET http://www.foo.com/ HTTP/1.1 GET是请求方式,请求方式有GET/POST http://www.fo ...

  10. 3.XML的格式化显示

    使用CSS/XSLT格式化XML,可以使XML具有更加多彩的显示效果. 3.1 使用CSS格式化显示XML 使用CSS格式化XML只需要在XML中加上: <?xml-stylesheet typ ...