学习
实践
活动
专区
工具
TVP
写文章

浅谈Python之面向对象(四)

今天介绍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)

运行结果:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180210G13V1I00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

同媒体快讯

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券