魔术方法
Posted moying-wq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了魔术方法相关的知识,希望对你有一定的参考价值。
类的常用魔术方法:无需人为调用,基本是在特定的时刻自动触发,方法名被前后两个下划线包裹
__init__:构造函数。
__new__:对象实例化方法,其实这才是类里面第一个被调用的方法,在构造函数之前调用,之后才是__init__,只是这个比较特殊,一般不使用。
__call__:对象当函数的时候触发。
1 class A(): 2 def __init__(self,name = 0): 3 print("哈哈,我是构造函数") 4 5 def __call__(self): 6 print("我是__call__函数") 7 8 a = A() 9 a() #对象当函数使用,如果没有__call__函数会报错
__str__:当对象被当做字符串使用过的时候调用。
1 class A(): 2 def __init__(self,name = 0): 3 print("哈哈,我是构造函数") 4 5 def __str__(self): 6 return "我只是一个例子" 7 8 a = A() 9 print(a) #把对象当字符串使用
__repr__:返回字符串,跟__str__函数差不多。
以上都是属于操作类的
属性操作相关:
__getattr__:访问不存在属性的时候触发。
__setattr__:对成员属性进行设置的时候触发,有三个参数--
1,self用来获取当前对象
2,被设置的属性名称,以字符串形式出现
3,需要对属性名称设置的值
作用:进行属性设置的时候进行验证或者修改。注意:在该方法中不能对属性直接进行赋值操作,否则会陷入死循环
1 A(): 2 def __init__(self): 3 pass 4 def __setattr__(self, name, value): 5 print("设置属性:{0}".format(name)) 6 self.name = value #这句语句会导致死循环 7 8 a = A() 9 a.age = 18
所以为了避免死循环,规定统一调用父类魔法函数:
1 class A(): 2 def __init__(self): 3 pass 4 def __setattr__(self, name, value): 5 print("设置属性:{0}".format(name)) 6 super().__setattr__(name,value) #super函数调用父类,避免死循环 7 8 a = A() 9 a.age = 18
运算分类相关魔术方法:
__gt__:进行大于判断的时候触发的函数。
以上是关于魔术方法的主要内容,如果未能解决你的问题,请参考以下文章