python 魔术方法

Posted lws865

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 魔术方法相关的知识,希望对你有一定的参考价值。

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

1.__init__ 初始化魔术方法 

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.注意事项:

以上是关于python 魔术方法的主要内容,如果未能解决你的问题,请参考以下文章

Python:不应该使用的魔术方法

怎么让你的Python代码更优雅!

PHP链式操作通过call和callstatic魔术方法的实现,以及phpstorm通过注释去追踪function

PHP链式操作通过call和callstatic魔术方法的实现,以及phpstorm通过注释去追踪function

Python 类的魔术方法

python魔术方法