python PTA 1004 成绩排名

本文介绍了如何使用Python的functools.total_ordering装饰器简化类的比较操作,通过实例展示了如何根据成绩对房屋进行排序,并提供了一个PTA练习题的解决方案,该题要求读入学生信息并输出最高和最低成绩的学生姓名和学号。
摘要由CSDN通过智能技术生成

你想让某个类的实例支持标准的比较运算(比如>=,!=,<=,<等),但是又不想去实现那一大丢的特殊方法。

Python类对每个比较操作都需要实现一个特殊方法来支持。 例如为了支持>=操作符,你需要定义一个 ge() 方法。 尽管定义一个方法没什么问题,但如果要你实现所有可能的比较方法那就有点烦人了。

装饰器 functools.total_ordering 就是用来简化这个处理的。 使用它来装饰一个来,你只需定义一个 eq() 方法, 外加其他方法(lt(<), le(<=), gt(>), or ge(>=))中的一个即可。 然后装饰器会自动为你填充其它比较方法。

作为例子,我们构建一些房子,然后给它们增加一些房间,最后通过房子大小来比较它们:

from functools import total_ordering


class Room:
    def __init__(self, name, length, width):
        self.name = name
        self.length = length
        self.width = width
        # 不需要传参的就不用在括号里面写了
        self.square_feet = self.length * self.width


@total_ordering
class House:
    def __init__(self, name, style):
        self.name = name
        self.style = style
        self.rooms = list()

    def add_room(self, room):
        self.rooms.append(room)

    @property
    def living_space_footage(self):
        # 因为property 可以直接这样调用函数
        return sum(r.square_feet for r in self.rooms)

    # 最后想要输出什么样的结果
    def <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值