魔术方法:一种特殊的方法而已。
特点:不需要人工调用,在特定的时刻自动执行。

1.__init__ 初始化魔术方法 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

1.触发时机:实例化对象之后触发
2.作用:为对象添加对象的所属成员。
3.参数:一个self 接受当前对象 其他的参数根据实例化的传参决定
4.返回值:无
5.注意事项:

 1  1 #__init__初始化魔术方法
 2  2 
 3  3 class Human:
 4  4     #属性
 5  5     sex = 'man'
 6  6     age = 1
 7  7     name = '张三'
 8  8     eye =2
 9  9     skin = 'yellow'
10 10 
11 11     #方法
12 12     #魔术方法__init__
13 13     def __init__(self,kidname):
14 14         print('init方法被执行')
15 15         #为对象加成员
16 16         self.sex = ''
17 17         self.age = 1
18 18         self.name = kidname
19 19 
20 20     def eat(self):
21 21         print('吃饭的方法')
22 22 
23 23     def run(self):
24 24         print('跑步的方法')
25 25 
26 26     def sleep(self):
27 27         print('睡觉的方法')
28 28 
29 29 #实例化一个人的对象
30 30
31 31 one = Human('刘佳怡') #实例化对像【1.制作一个对象(new),2.初始化对像(init)】
32 32 #输出结果:init方法被执行 33 34 print(one.__dict__)#打印对象成员 35 #输出结果:{'sex': '男', 'age': 1, 'name': '刘佳怡'} 36 37 print(one) 38 #输出结果:<__main__.Human object at 0x00000149782C0048>

 

2.__new__ 构造方法
1.触发时机:实例化对象的时候触发!
2.作用:管理控制对象的生成过程。
3.参数:一个cls接受当前类,其他的参数根据实例化的参数决定
4.返回值:可有可无 没有返回值,实例化结果为None
5.注意事项:new魔术方法跟init的魔术方法的参数一致(除了第一个)

 1 #__init__初始化魔术方法
 2 
 3 class Human:
 4     #属性
 5     sex = 'man'
 6     age = 1
 7     name = '张三'
 8     eye =2
 9     skin = 'yellow'
10 
11     #方法
12     #魔术方法(重载object内部自带的 __new__)
13     def __new__(cls,sex):
14         print('new方法被触发')
15         #return 'new的返回值'
16         #自已控制对象的生成过程(女的生,男的不生)
17         if sex == '':
18             #生成对象并返回
19             return object.__new__(cls) #object上帝之手,重做了一个Human对象
20         else:
21             return None
22 
23 
24     def eat(self):
25         print('吃饭的方法')
26 
27     def run(self):
28         print('跑步的方法')
29 
30     def sleep(self):
31         print('睡觉的方法')
32 
33 #实例化一个人的对象
34 #__new__方法在实例化对象的时候被执行
35 one = Human('')#实例化对像【1.制作一个对象(new),2.初始化对像(init)】
36 #输出结果:new方法被触发
37 print(one) #上面实例化是输入女,所以能做出对象:<__main__.Human object at 0x000001B2C1BE0048>
38 #输出结果:<__main__.Human object at 0x000001B2C1BE0048>
39 
40 #实例化一个人的对象
41 #__new__方法在实例化对象的时候被执行
42 one2 = Human('')#实例化对像【1.制作一个对象(new),2.初始化对像(init)】
43 #输出结果:new方法被触发
44 print(one2) #上面实例化是输入男,所以不能做出对象:None
45 #输出结果:None

 __new__方法延伸实例

 1 #__new__将猴子类重载到人类
 2 #猴子类
 3 class Monkey:
 4     pass
 5 
 6 #人类
 7 class Human:
 8     #重载new方法
 9     def __new__(cls):
10         #返回,对象.重载入Monkey猴子类
11         return object.__new__(Monkey)
12     pass
13 
14 #实例化人类对象
15 ren = Human()
16 
17 #打印人类对象
18 print(ren) #返回猴子的对象
19 #输出结果:<__main__.Monkey object at 0x00000238556B8588>

 


3.__del__ 析构方法 (拆构方法)
1.触发时机:对象被系统回收的时候自动触发(del不一定触发)
2.作用:回收程序使用过程的信息和变量等
3.参数:一个self接收当前对象
4.返回值:
5.注意事项:


4.__call__
1.触发时机:将对象当作函数调用的时候自动触发
2.作用:常用于归结类/对象的操作步骤,方便后期掉用
3.参数:一个self接受当前对象,其余的参数根据需求添加
4.返回值:可以有,可以没有
5.注意事项:

 

5.__len__

1.触发时机:使用len函数检测对象的时候自动触发
2.作用:使得len可以检测对象中某个数据的信息
3.参数:一个self接受当前对象
4.返回值:必须有,必须是整型
5.注意事项:len检测什么有程序员自己决定

 

6.__str__
1.触发时机:使用print打印对象的时候自动触发
2.作用:可以定义打印对象显示的信息内容
3.参数:一个self接受当前对象
4.返回值:必须有,且必须是字符串类型
5.注意事项:除了print之外,使用str() 转换数据的时候也会触发

 

7.__repr__
1.触发时机:在使用repr转换对象的时候自动触发
2.作用:可以设置repr函数操作对象的结果
3.参数:一个self接受有当前对象本身
4.返回值:有必须是字符串
5.注意事项:正常情况下,类中的__str__和__repr__魔术方法是完全一样的(字符串中的str和repr魔术方法就不一样。)

 

8.__bool__
1.触发时机:使用bool() 转换对象的时候自动触发
2.作用:用于检测对象成员的信息
3.参数:一个self接受当前对象
4.返回值:必须有且必须是布尔值
5.注意事项:

 

9.__format__
1.触发时机:
2.作用:
3.参数:
4.返回值:
5.注意事项:

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄