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. 【转】对Django框架架构和Request/Response处理流程的分析

    本文转载于疯狂的蚂蚁. 一. 处理过程的核心概念 如下图所示django的总览图,整体上把握以下django的组成: 核心在于中间件middleware,django所有的请求.返回都由中间件来完成. ...

  2. spring boot gradle build:bootRepackage failed

    When running 'gradle clean build' on my spring boot project (version 1.3.6.RELEASE) on windows 10 (a ...

  3. windows系统解决github.com访问超时

    当github无法访问时,可以尝试在hosts文件中添加下面的内容 windows:c:\windows\system32\drivers\etc 192.30.252.131 https://git ...

  4. HTML阶段总结

    自学有两个多星期了,这段时间主要在学习HTML基础知识,万事开头难,刚开始根本没法上手,云里雾里的,没有清晰的思路和详细的学习计划.问了一些盆友,找了一些资料,找到了适合自己的学习方法,渐渐的进入了轨 ...

  5. javascript面向对象(一)

    javascript是弱类型,直译式的面相对象编程语言. 在之前我们说过 var a = 123: 在这里a是整数 但是我们可以给a重新复制为 a="你好"; 在这个过程中变量a ...

  6. 英文单词断行问题:CSS中word-break、word-wrap以及hyphens的兼容性和区别

    CSS中一提到单词断行,最先映入脑海的肯定是word-break和word-wrap这两条属性.但对于这两条属性到底有什么区别,兼容性如何,我一直都概念模糊.今天抽空把它们以及CSS3中新加入的断行属 ...

  7. Android 中基于 Binder的进程间通信

    摘要:对  Binder 工作机制进行了分析. 首先简述 Android 中 Binder 机制与传统的 Linux 进程间的通信比较,接着对基于 Binder 进程间通信的过程分析 最后结合开发实例 ...

  8. 实现QQ、微信、新浪微博和百度第三方登录(Android Studio)

    前言: 对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享: 各大开放平台注册账户获取AppK ...

  9. WSDL/WebService/SOAP/REST/AXIS/CXF 开放式服务

    WebService是一种数据交换标准.通过WebService标准,你可以把项目中的方法作为接口提供给其他项目使用. 有时候我们习惯性地将具体提供服务的某个方法称为WebService.比如图书系统 ...

  10. hdu 3032 Nim or not Nim? (sg函数打表找规律)

    题意:有N堆石子,每堆有s[i]个,Alice和Bob两人轮流取石子,可以从一堆中取任意多的石子,也可以把一堆石子分成两小堆 Alice先取,问谁能获胜 思路:首先观察这道题的数据范围  1 ≤ N ...