1、何为魔法方法:

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

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

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

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

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

  3.方法与函数的区别:

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

    ① 方法定义在class内部

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

2、魔法方法汇总:

方法描述备注
1、基本方法
__new__(cls[,*argv])1. new 是在一个对象实例化的时候所调用的第一个方法 2. 它的第一个参数是这个类,其他的参数是用来直接传递给 init 方法 3. new 决定是否要使用该 init 方法,因为 new 可以调用其他类的构造方法或者直接返回别的实例对象来作为本类的实例,如果 new 没有返回实例对象,则 init 不会被调用 4. new 主要是用于继承一个不可变的类型比如一个 tuple 或者 stringcls:代表一个类的名称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 xy若有Z,则为 return xy%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)是一个类,主要功能是为了方便类内部函数的调用
__get__(self, instance, owner)描述符被访问时调用
__set__(self, instance, value)描述符被改变时调用
__delelte__(self, instance, value)删除描述符时调用
8、容器类型操作
__len__(self)求容器的大小(注意与capacity的区别)可变和非尅便容器均具备 lengetitem
__getitem__(self, key)获取容器中指定元素的行为
__setitem__(self, key, value)设置容器中指定元素的行为只有可变容器拥有 setitemdelitem
__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的内存机制都是解释器自动完成的
本文作者: Author:     文章标题: Python魔法方法总结
本文地址: https://codewei.cn/archives/205/      
版权说明:若无注明,本文皆为“阿伟的小屋”原创,转载请保留文章出处
Last modification:June 24th, 2020 at 09:17 am
贫困山区儿童,谢谢打赏