Python的描述符

#######################################################################################
# Author : CHR_崔贺然
# Time : 20200412
# TODO : description描述符,需求做一个成绩管理系统,在property、staticmethod、classmethod中都有使用
# *
# !
# ?
#######################################################################################


# # 这种方法很笨,需要对入参做类型检查
# class Student:
#     def __init__(self, name, math, chinese, english):
#         self.name = name
#         self.math = math
#         self.chinese = chinese
#         self.english = english

#     # 推荐每个类都要带上__repr__
#     def __repr__(self):
#         return f"姓名:{self.name},数学:{self.math},语文:{self.chinese},英语:{self.english}"


# s1 = Student("崔贺然", 100, 100, 100)
# print(s1)


# 改进版
class Score:
    def __init__(self, default=0):
        self._score = default

    def __set__(self, instance, value):
        if not isinstance(value, int):
            raise ValueError("score must be integer")
        if not 0 <= value <= 100:
            raise ValueError("value must be in 0-100")

        self._score = value

    def __get__(self, instance, owner):
        return self._score

    def __del__(self):
        del self._score


class Student:
    math = Score(0)
    chinese = Score(0)
    english = Score(0)

    def __init__(self, name, math, chinese, english):
        self.name = name
        self.math = math
        self.chinese = chinese
        self.english = english

    def __repr__(self):
        return f"姓名:{self.name},数学:{self.math},语文:{self.chinese},英语:{self.english}"


s1 = Student("崔贺然", 100, 100, 100)
print(s1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值