封装的定义:
将数据(属性)和行为(方法)包装到类对象中。在方法内部对属性进行操作,在外部调用方法,这样无需关心方法内部的具体实现细节,隔离了复杂度
如果一个属性不希望在类对象外被访问,前面使用两个__
作用:提高程序的安全性
例如我们创建Student类,其中创建一个方法判断学生是否通过考试
如果可以在类外访问属性的话,就可以在类外修改成绩,从而改变结果,如图所示
class Student:
def __init__(self,name,age,grades):
self.name=name
self.age=age
self.grades=grades
def describe_grade(self):
if self.grades>=60:
print('Congratulation!',self.name,'You passed the exam!')
else:
print('Sorry,',self.name,',you failed.')
student1=Student('lily',14,45)
student1.describe_grade()
student1.grades=98 类外修改实例属性,改变describe方法的结果
student1.describe_grade()
现在将属性私有化
class Student:
def __init__(self,name,age,grades):
self.name=name
self.age=age
self.__grades=grades
def describe_grade(self):
if self.__grades>=60:
print('Congratulation!',self.name,'your grades are',self.__grades,',you passed the exam!')
else:
print('Sorry,',self.name,'your grades are',self.__grades,',you failed.')
student1=Student('lily',14,45)
student1.describe_grade()
student1.grades=80
student1.describe_grade()
结果为:
Sorry, lily your grades are 45 ,you failed.
Sorry, lily your grades are 45 ,you failed.
不能改变__grades的值