今天我们学习魔术方法,魔术方法听这个名字我们可能完全不知道这是魔术方法个什么,其实魔术方法就是魔术方法在我们定义的类中定义一些”不一般”的方法,使类的魔术方法使用更方便、完善、魔术方法健壮,魔术方法是魔术方法python特有的方法,一般都是魔术方法前后包含两个下划线__的方法称为魔术方法,例如__new__。魔术方法基本魔术方法有哪些 __new__:是魔术方法在一个对象实例化的时候所调用的第一个方法,用来创建类并返回这个类的魔术方法实例; classStudent:def __init__(self):print("__init__()调用")def __new__(cls,*args,**kwargs):print(__new__()调用, { cls}.format(cls=cls))returnobject.__new__(cls,魔术方法*args,**kwargs)stu =Student()# 输出结果:__new__()调用,<class__main__.Student>__init__()调用很明显可以看出,魔术方法先调用了__new__方法,魔术方法然后调用了__init__方法 __init__:构造器,魔术方法是一个初始化方法,在一个实例被创建之后调用; __del__:析构器,当一个实例被销毁的时候调用的方法; __bool__:如果对象实现了bool方法,亿华云那么返回结果,非0为真,如果没有实现bool方法,调用len方法,返回非0为真; __hash__:返回一个整数,表明对象可以hash; __repr__:返回对象的字符串表达式,如果没有实现,直接返回对象内存地址字符串; __str__:str()、print()、format()函数打印对象字符串,会直接调用str方法,如果没有实现,会调用repr方法; __hash__:定义当被 hash() 调用时的行为; __bytes__:定义当被 bytes() 调用时的行为; __format__:定义当被 format() 调用时的行为; __getattr__:定义当用户试图获取一个不存在的属性时的行为; __setattr__:定义当一个属性被设置时的行为; __getattribute__:定义当该类的属性被访问时的行为; __delattr__:删除一个属性时执行的方法; __dir__:定义当 dir() 被调用时的行为; __get__:定义当描述符的值被取得时的行为; __set__:定义当描述符的值被改变时的行为; __delete__:定义当描述符的值被删除时的行为; 我们通过一小实例来看一下,有关于运算符相关的魔术方法的使用 __add__:定义加法的云服务器方法; __sub__:定义减法的方法; __mul__:定义乘法的方法; __truediv__:定义除法的方法; __floordiv__:定义整数除法的行为://; __mod__:定义取模算法的行为:%; __divmod__:定义当被 divmod() 调用时的行为; __pow__:定义当被 power() 调用或 ** 运算时的行为; __lshift__:定义按位左移位的行为:<<; __rshift__:定义按位右移位的行为:>>; __and__:定义按位与操作的行为:&; __xor__:定义按位异或操作的行为:^; __or__:定义按位或操作的行为:|; 有关于比较操作符的魔术方法也有很多,下面例子中有__eq__和__lt__的举例,大家自己动手把所有的方法都操作一遍,就能很快理解操作符相关魔术方法的使用了 __eq__:定义等于号的方法,等价于==; __lt__:定义小于号方法,等价于<; __gt__:定义大于号方法,等价于>; __le__:定义小于等于号的行为,等价于 <= ; __ne__:定义不等号的行为,等价于!= ; __ge__:定义大于等于号的行为,等价于 >= ; __len__:定义当被 len() 调用时的行为(返回容器中元素的云服务器提供商个数); __iter__:定义当迭代容器中的元素的行为; __getitem__:获取容器中的元素,相当于 self[key]; __setitem__:设置容器中的元素,相当于 self[key] = value; __delitem__:删除容器中的某个元素,相当于 del self[key]; __reversed__:定义当被 reversed() 调用时的行为; __contains__:定义当使用成员测试运算符(in 或 not in)时的行为; Python中,实现了call方法的对象都是可调用对象; __call__:允许一个类的实例像函数一样被调用:x(a, b)调用为 x.__call__(a, b); 更多魔术方法的详情可以参考python官网:https://docs.python.org/3/reference/datamodel.html学习视频:https://www.9xkd.com/user/plan-view.html?id=3623904578