一、为什么要将方法封装成属性
假设我们定义了一个student类,他有score属性。这样直接把属性暴露出来,不管是修改成绩还是读取成绩都非常方便,但是带来的问题是无法检查参数是否合法(python没有办法强制要求变量类型),导致成绩可以随意修改:
class student():
def __init__(self,name,score = 0):
self.name = name
self.score = score
a = student('wang',20)
print(a.score) #[OUT]:20
a.score = 999
print(a.score) #[OUT]:999
a.score = '^_^'
print(a.score) #[OUT]:'^_^'
初始定义a的成绩为20,但是可以随意修改为999,甚至恶作剧般的将成绩改成字符串,这当然不符合我们设计的初衷。
为了限制score的范围和类型,我们可以通过set_score()方法设置成绩,在通过get_score()方法获取成绩。这样,在set_score()方法里面就可以检查参数:
class student():
def __init__(self,name):
self.name = name
def get_score(self):
return self._score
def set_score(self, value):
if not isinsta