python cmp函数未定义_关于python的覆盖__cmp__的两点问题

关于python的覆盖__cmp__的两点问题#!/usr/bin/envpython'例13.6'classNumStr(object):def__init__(self,num=0,string=''):self._num=numself._string=stringdef__norm_cval(self,cmp...

关于python的覆盖__cmp__的两点问题#!/usr/bin/env python

'例13.6'

class NumStr (object):

def __init__ (self,num=0,string=''):

self._num=num

self._string=string

def __norm_cval (self,cmpres):

return cmp(cmpres,0)

def __cmp__ (self,other):

return self.__norm_cval(cmp(self._num,other._num))+\

self.__norm_cval(cmp(self._string,other._string))

问题1:

>>> a=NumStr(3,'foo')

>>> b=NumStr(3,'goo')

>>> c=NumStr(2,'foo')

>>> a

True

>>> b

False

>>> a==a

True

为啥我没重载操作符,就可以比较实例之间的大小呢?我觉得是用操作符比较大小的时候调用了cmp函数,可是具体的调用过程是怎么实现的?

(比较大小的规则:(a,b两个实例)

1 a._num=b._num : a._string>b._string ->a大 a._stringb大

2. 如果实例的两个参数都比对方大,这个实例就比对方大

3.如果一个参数大,一个参数小,两个实例一样大)

问题2:

调用cmp(b,c):

分别比较两个实例的数字和字符串大小,因为cmp(x,y) x>y返回正数,x

那么问题来了,我们调用cmp(b,c)的时候,b的num和string都是比c大的,按理说应该返回2,为什么返回的却是1?

能帮我看一下吗?谢谢

展开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值