gpt4 book ai didi

python - 使用覆盖的 __cmp__ 函数实现列表包装器

转载 作者:太空宇宙 更新时间:2023-11-04 01:14:05 25 4
gpt4 key购买 nike

我创建了一个新的 Python 对象,如下所示

class Mylist(list):
def __cmp__(self,other):
if len(self)>len(other):
return 1
elif len(self)<len(other):
return -1
elif len(self)==len(other):
return 0

我的意图是,当比较两个 Mylist 对象时,项目数较多的对象应该更高

c=Mylist([4,5,6])
d=Mylist([1,2,3])

运行上面的代码后,cd 应该是相等的(c==d <==True )。但是我得到了

>>> c==d
False
>>> c>d
True
>>>

它们像 list 对象本身一样被比较。我做错了什么?

最佳答案

你需要实现函数__eq__

class Mylist(list):
def __cmp__(self,other):
if len(self)>len(other):
return 1
elif len(self)<len(other):
return -1
elif len(self)==len(other):
return 0
def __eq__(self, other):
return len(self)==len(other)

更新:(如注释中所述,之前的代码无法完美运行)

虽然 @tobias_k 的回答解释得更好,但如果您坚持,可以通过 Python 2 中的 __cmp__ 函数来完成。您可以通过删除其他比较函数(le、lt、ge、...)来启用它:

class Mylist(list):
def __cmp__(self,other):
if len(self)>len(other):
return 1
elif len(self)<len(other):
return -1
elif len(self)==len(other):
return 0
def __eq__(self, other):
return len(self)==len(other)
@property
def __lt__(self, other): raise AttributeError()
@property
def __le__(self, other): raise AttributeError()
@property
def __ne__(self, other): raise AttributeError()
@property
def __gt__(self, other): raise AttributeError()
@property
def __ge__(self, other): raise AttributeError()

关于python - 使用覆盖的 __cmp__ 函数实现列表包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25762795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com