前言
在python2中,有一个cmp函数用于对比两个对象,但是在python3中已经被舍弃,其功能集成到了operator模块。
例子
import operator
# 1. int, equal
res = operator.eq(2, 2)
# 2. int, lt(小于)
res = operator.lt(1, 2)
# 3. int, le(小于等于)
res = operator.le(2, 2)
# 4. custom obj
class MyObj(object):
def __init__(self, a):
self.a = a
a1, a2 = MyObj(1), MyObj(1)
res = operator.eq(a1, a2)
print(id(a1), id(a2)) # 输出id不同
print(res) # False
# 5. singleton obj
class Singleton(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, "_instance"):
cls._instance = super().__new__(Singleton)
return cls._instance
s1, s2 = Singleton(), Singleton()
res = operator.eq(s1, s2)
print(id(s1), id(s2)) # 输出id相同,是同一对象
print(res) # True
这里主要对自定义类进行测试,自定义类分为两种,一种是单例模式类产出的对象,另一种是非单例模式产出的对象。
单例对象,operator.eq永远返回True,因为eq是根据id来判断是否为同一对象的。
同理,非单例对象,operator.eq永远返回False。