1. 定义:
在程序设计中,封装(Encapsulation)是对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,其
含义是其他程序无法调用。
2. 封装操作:
2.1 封装的形式
在python类中,通过限制属性和方法的名称,用来控制数据的访问权限,分为3种:
(1)私有,属性和方法以'__'(两个下划线)开始,表明该属性和方法为私有变量,只允许类内进行访问
(2)保护,属性和方法以'_'(一个下划线)开始,表明该属性和方法为保护变量,允许本类和子类进行访问
(3)公有,不需要特殊要求,是python的默认方法。
注意:
1.类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊的方法,可以直接访问。因此不能以这样的格式命名变量。
2. 在实际的运行中,保护变量和公有变量的使用的方式几乎没有区别,可以直接访问,但是按照约定,最好当作私有变量对待。
3.python的私有是伪私有,因为可以通过 '_类名__变量或方法'访问,但是,不建议这样使用,因为打破了封闭性,而且在不同的解释器,可能会引起未知的错误
访问变量
运行结果:
调用方法:
运行结果
2.2 property特性:
如果想要限制属性的取值访范围的话 ,可以通过类方法进行
运行结果
但是,这样操作,需要调用函数,操作比较繁琐。因此oython提供了一种方法,解决这类问题。python装饰器@property可以将一个方法转换成想属性一样操作,示例:
运行结果:
注意:
1. @property是装饰器,可以使方法像属性一样访问。
2. @方法名.setter也是装饰器,方法的名称要和@property和自己修饰的函数相同,可以使方法像属性一样赋值。
3 @property修饰的方法会优先于同名属性的调用,注意上方的age属性和age方法(执行a.age时,调用了方法而不是属性)