class Student():
def __init__(self, stuid, name, score1, score2, score3):
self.stuid = stuid
self.name = name
self._score1 = score1
self._score2 = score2
self._score3 = score3
def get_score1(self):
return self._score1
def set_score1(self, score):
if 0 <= score <= 100:
self._score1 = score
else:
raise ValueError("score not in [0,100]")
def get_score2(self):
return self._score2
def set_score2(self, score):
if 0 <= score <= 100:
self._score2 = score
else:
raise ValueError("score not in [0,100]")
def get_score3(self):
return self._score3
def set_score3(self, score):
if 0 <= score <= 100:
self._score3 = score
else:
raise ValueError("score not in [0,100]")
score1 = property(get_score1, set_score1)
score2 = property(get_score2, set_score2)
score3 = property(get_score3, set_score3)
def returnMe(self):
return "%s, %s, %i, %i, %i" % (
self.stuid,
self.name,
self.score1,
self.score2,
self.score3)
和from weakref import WeakKeyDictionary
class Score():
""" score should in [0,100] """
def __init__(self):
self.score = WeakKeyDictionary()
#self.score = {}
def __get__(self, instance, owner):
return self.score[instance]
def __set__(self, instance, value):
if 0 <= value <= 100:
self.score[instance] = value
else:
raise ValueError("score not in [0,100]")
class Student():
# 托管属性定义在类级别上
score1 = Score()
score2 = Score()
score3 = Score()
def __init__(self, stuid, name, score1, score2, score3):
self.stuid = stuid
self.name = name
self.score1 = score1
self.score2 = score2
self.score3 = score3
def returnMe(self):
return "%s, %s, %i, %i, %i" % (
self.stuid,
self.name,
self.score1,
self.score2,
self.score3)
stu = Student("20101120", "malong", 67, 77, 88)
print(stu.returnMe())
stu.score1 = -23
这两个为什么第一个重复代码,第二个没重复,这两个都用了描述符,只不过第一个用了成品property,第二个是自定义描述符,那为什么第一个代码就冗余了呢