python中lt方法_Python进阶——如何正确使用魔法方法?(下)

本文详细介绍了Python中的魔法方法,包括比较操作(__cmp__、__eq__、__ne__、__lt__、__gt__)、容器类操作(__setitem__、__getitem__、__delitem__、__len__、__iter__、__contains__、__reversed__)、可调用对象的__call__方法以及序列化的__getstate__和__setstate__方法。通过实例展示了如何利用这些魔法方法自定义对象的行为,如自定义比较逻辑、创建自定义容器类、使实例可调用以及控制序列化过程。
摘要由CSDN通过智能技术生成

在上一篇文章Python进阶——如何正确使用魔法方法?(上)中,我们主要介绍了关于构造与初始化、类的表示、访问控制这几类的魔法方法,以及它们的使用场景。

这篇文章,我们继续介绍剩下的魔法方法,主要包括:比较操作、容器类操作、可调用对象、序列化。

比较操作

比较操作的魔法方法主要包括以下几种:__cmp__

__eq__

__ne__

__lt__

__gt__

__cmp__

从名字我们就能看出来这个魔法方法的作用,当我们需要比较两个对象时,我们可以定义__cmp__来实现比较操作。class Person(object):

def __init__(self, uid):

self.uid = uid

def __cmp__(self, other):

if self.uid == other.uid:

return 0

if self.uid > other.uid:

return 1

return -1

p1 = Person(1)

p2 = Person(2)

print p1 > p2 # False

print p1 

print p1 == p2 # False

从例子中我们可以看到,比较两个对象的具体逻辑:如果__cmp__返回大于 0 的整数(一般为1),说明 self > other

如果__cmp__返回大于 0 的整数(一般为-1),说明 self < other

如果__cmp__返回 0,说明 self == other

当然,这种比较方式有一定的局限性,如果我有 N 个属性,当比较谁大时,我们想用属性 A 来比较。当比较谁小时,我们想用属性 B 来比较,此时__cmp__就无法很好地实现这个逻辑了,所以它只适用于通用的比较逻辑。那如何实现复杂的比较逻辑?这就需要用到__eq__、__ne__、__lt__、__gt__这些魔法方法了,我们看下面这个例子。# coding: utf8

class Person(object):

def __init__(self, uid, name, salary):

self.uid = uid

self.name = name

self.salary = salary

def __eq__(self, other):

"""对象 == 判断"""

return self.uid == other.uid

def __ne__(self, other):

"""对象 != 判断"""

return self.uid != other.uid

def __lt__(self, other):

"""对象 

retu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值