python 描述符 @property装饰器
  X5zJxoD00Cah 2023年11月02日 48 0
'''python 描述符'''
# https://blog.csdn.net/weixin_57289786/article/details/117468662

'''对变量没有要求'''
class student():
    def __init__(self, name, math, chinese):
        self.name = name
        self.math = math
        self.chinese = chinese
    def __repr__(self):
        return "<student: {}, math: {}, english: {}>".format(
            self.name, self.math, self.chinese
        )
ob_student = student(1,2,3)
ob_student
'''math, chinese必须为[0,100]内的实数'''
def real_number_between(num:int= 50, start= 0, end= 100):
    if start<= num <= end:
        return True
    else:
        return False

class student():
    def __init__(self, name, math, chinese):
        self.name = name
        
        if real_number_between(math):
            self.math = math
        else:
            raise ValueError("Valid value must be in [0, 100]")
        
        if real_number_between(chinese):
            self.chinese = chinese
        else:
            raise ValueError("Valid value must be in [0, 100]")
        
    def __repr__(self):
        return "<student: {}, math: {}, english: {}>".format(
            self.name, self.math, self.chinese
        )
ob_student = student(1,2,300)
ob_student
'''@property装饰器 把一个方法变成属性调用'''
# https://www.liaoxuefeng.com/wiki/1016959663602400/1017502538658208
'''Python中@property和@setter的用法'''
# https://www.cnblogs.com/yeer-xuan/p/13488291.html
'''下划线'''
# https://blog.csdn.net/qq_43439853/article/details/99584193
# https://zhuanlan.zhihu.com/p/36173202

class student():
    def __init__(self, name, math, chinese):
        self.name = name
        self.math = math
        self.chinese = chinese
    
    @property
    def math(self):
        return self._math # 允许访问的私有变量
    @math.setter
    def math(self, value):
        if real_number_between(value):
            self._math = value
        else:
            raise ValueError("Valid value must be in [0, 100]")
    
    @property
    def chinese(self):
        return self._chinese
    @chinese.setter
    def chinese(self, value):
        if real_number_between(value):
            self._chinese = value
        else:
            raise ValueError("Valid value must be in [0, 100]")

    def __repr__(self):
        return "<student: {}, math: {}, english: {}>".format(
            self.name, self.math, self.chinese
        )
ob_student = student(1,2,300)
ob_student
'''python 描述符'''
class Score:
    def __init__(self, default=0):
        self._score = default

    def __set__(self, instance, value):
        if not isinstance(value, int):
            raise TypeError('Score must be integer')
        if not 0 <= value <= 100:
            raise ValueError('Valid value must be in [0, 100]')
        self._score = value

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

        
class Student:
    math = Score(0)
    chinese = Score(0)
    def __init__(self, name, math, chinese):
        self.name = name
        self.math = math
        self.chinese = chinese

    def __repr__(self):
        return "<student: {}, math: {}, english: {}>".format(
            self.name, self.math, self.chinese
        )
ob_student = student(1,2,300)
ob_student
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  X5zJxoD00Cah   2023年12月11日   26   0   0 知乎Python迭代器
  X5zJxoD00Cah   2023年12月12日   34   0   0 Python.net
X5zJxoD00Cah