1 没有范围限制 在类外部可以更改类内部的属性值
# 但是,既然Student实例本身就拥有这些数据,要访问这些数据,就没有必要从外面的函数去访问,
# 可以直接在Student类的内部定义访问数据的函数,这样,就把“数据”给封装起来了.
# 这些封装数据的函数是和Student类本身是关联起来的,我们称之为类的方法:
class Student(object):
def __init__(self,name,score):
self.name= name #实例变量名前加下划线 就变成了一个私有变量,只有内部可以访问,外部不能访问
self.score= score
def print_score(self):
print('%s:%s'%(self.name,self.score))
def get_grade(self):
if self.score>= 90:
return 'A'
elif self.score>= 60:
return 'B'
else:
return 'C'
# 创建实例 仅做传参,不管类内做的(类内部决定了打印的效果,比如新增加一个判断ABC级别的类)
bart=Student('fqs',59)
# 调用类中封装的方法
bart.print_score()# 打印成绩 fqs:59
print(bart.get_grade())# 打印成绩的等级
# 更改他的姓名和成绩
bart.score= 99
bart.print_score()# 打印成绩 fqs:99
2. 类内的属性 访问受限;通过在属性前面加双下划线 使其变成了私有属性
class Student(object):
def __init__(self,name,score):
self.__name= name #实例变量名前加下划线 就变成了一个私有变量,只有内部可以访问,外部不能访问
self.__score= score
def print_score(self):
print('%s:%s'%(self.__name,self.__score))
def get_grade(self):
if self.__score>= 90:
return 'A'
elif self.__score>= 60:
return 'B'
else:
return 'C'
def get_name(self):
return self.__name
def get_score(self):
return self.__score
# 创建实例 仅做传参,不管类内做的(类内部决定了打印的效果,比如新增加一个判断ABC级别的类)
bart=Student('fqs',59)
# 调用类中被封装的属性
# print(bart.__name)# 不建议之间调用私有的属性会报错
# print(bart.__score)
print(bart.get_name()) # 建议通过方法来调用私有的属性
print(bart.get_score())