'''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