码迷,mamicode.com
首页 > 其他好文 > 详细

魔术方法

时间:2018-11-24 22:23:17      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:ini   实例化   __str__   __new__   att   self   get   --   value   

类的常用魔术方法:无需人为调用,基本是在特定的时刻自动触发,方法名被前后两个下划线包裹

__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__:进行大于判断的时候触发的函数。

魔术方法

标签:ini   实例化   __str__   __new__   att   self   get   --   value   

原文地址:https://www.cnblogs.com/moying-wq/p/10013685.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!