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 魔术方法的主要内容,如果未能解决你的问题,请参考以下文章
PHP链式操作通过call和callstatic魔术方法的实现,以及phpstorm通过注释去追踪function