今天介绍Python中面向对象的高级方法---魔法方法(Magic Method)
方法名首尾都有两个下划线的方法叫做 magic method,比如构造方法和析构方法。
以下这些方法都属于魔术方法
关于对象的创建和初始化
new在init之前调用,返回一个类的对象。销毁对象会调用__del()__方法,不需要我们主动调用,垃圾回收将对象销毁的时候,对象__del()__会被调用
实例演示:
# -*- coding:utf-8 -*-
classProgramer(object):
def__new__(cls,*args,**kwargs):
print('call __new__ mothod')
print(args)
returnsuper(Programer,cls).__new__(cls)
def__init__(self,name,age):
print('call __init__ method')
self.name = name
self.age = age
if__name__ =='__main__':
programer = Programer('Ghost',22)
print(programer.__dict__)
运行结果:
这里可以看到,构造属性的过程是首先对new方法进行调用,用来返回一个programer对象,然后把programer对象交给init,由init来对属性进行设置。
类与运算符
__eq__方法就是用来判断是否相等的运算符
__cmp__(self,other) 比较__eq__(self,other) 处理等于__lt__(self,other) 小于__gt__(self,other) 大于
__add__(self,other) 加__sub__(self,other) 减__mul__(self,other) 乘__div__(self,other) 除
__or__(self,other) 或__and__(self,other) 和
实例演示:
# -*- coding:utf-8 -*-
classProgramer(object):
def__init__(self,name,age):
self.name = name
ifisinstance(age,int):
self.age = age
else:
raiseException('age must be int')
def__eq__(self,other):
ifisinstance(other,Programer):
ifself.age == other.age:
return True
else:
return False
else:
raiseException('The type of object must be Programer')
def__add__(self,other):
ifisinstance(other,Programer):
returnself.age + other.age
else:
raiseException('The type of object must be Programer')
if__name__ =='__main__':
p1 = Programer('Ghost',22)
p2 = Programer('Olina',18)
print(p1 == p2)
print(p1 + p2)
运行结果:
领取专属 10元无门槛券
私享最新 技术干货