为了账号安全,请及时绑定邮箱和手机立即绑定

关于例题self.name和s.name的问题求教。

例题中代码:def __cmp__(self,s): 

                        if self.name<s.name:

                        ...

我的问题是,参数s为什么不用定义就是Student类?直接有name这个属性。然后例题中说“__cmp__用实例自身self和传入的实例s进行比较”这句话不是很理解,感觉实例自身self和传入的实例s不是一样的东西吗?求大神路过解答,谢谢~

正在回答

4 回答

这是python中sorted()已经定义好的函数规则,记住即可。

L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 99)]

print sorted(L)

以上部分解析:self就是Student('Tim', 99),而s是Student('Bob', 88),这两个进行__cmp__比较。循环整个L,同理可得出整个排序。



2 回复 有任何疑惑可以回复我~
#1

Huang小明 提问者

非常感谢!
2016-11-18 回复 有任何疑惑可以回复我~

class Student(object):

    def __init__(self, name, score):

        self.name = name

        self.score = score

    def __str__(self):

        return '(%s: %s)' % (self.name, self.score)

    __repr__ = __str__


    def __cmp__(self, s):

        print s.name,self.name

        if self.name < s.name:

            print -1

            return -1

        elif self.name > s.name:

            print 1

            return 1

        else:

            print 0

            return 0



L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 77)]

print sorted(L)

跑一下这段程序你就理解了

0 回复 有任何疑惑可以回复我~
#1

木城武

你这和没说好像没有很大区别吧。。。楼主问的就是这一段代码里s的意思啊。。。
2017-07-22 回复 有任何疑惑可以回复我~

豁然开朗,非常感谢

0 回复 有任何疑惑可以回复我~

非常感谢,似乎懂了


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

关于例题self.name和s.name的问题求教。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信