面向对象 第二部分 访问限制
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())