封装是对全局作用域中其它区域隐藏多余信息的原则。
封装听起来有些像多态,因为他们都是 抽象的原则---他们都会帮助处理程序组件而不用过多关心多余细节,就像函数做的一样。但是封装并不等同于多态。多态的可以让用户对于不知道是什么类(或对象类型)的对象进行方法调用,而封装是可以不用关心对象是如何构建的而直接进行使用。
创建一个有对象(通过像调用函数一样调用类)后,将变量c绑定到该对象上。可以使用set和 get 方法如:
>>>class Person:
>>> def __init__(self,name): -->初始化函数,对对象的属性初始化
>>> self.__name=name-->通过传参数,为私有变量__name复赋值
>>> def get_name(self):-->定义公有get函数,用以类外获取对象私有属性的值
>>> return self.__name
>>> def set_name(self,n):-->定义公有set函数,用以类外修改私有属性的值
>>> self.__name=n
>>>person=Person("tom")
>>>print(person.get_name())
>>>person.set_name("tony')
>>>print(person.get_name())
这个程序就实现了封装,将__name属性定义为私有属性,外界不可对其直接访问,只能通过类内定义的set和get函数实现对属性的修改和提取,最终输出的结果是("tom")("tony")y
@property,@(method).setter这两个注解更加严密的隐藏了类的方法,把set和get函数注解为对象,然后用对象的操作方法操作这两个函数如:
>>> @property
>>> def get_name(self):-->定义公有get函数,用以类外获取对象私有属性的值
>>> return self.__name
>>> @get_name.setter
>>> def set_name(self,n):-->定义公有set函数,用以类外修改私有属性的值
>>> self.__name=n
函数的重载使面向对象的封装达到了一个新的高度,搭配@property和@(method).setter使函数的工作方法彻底隐藏,函数的重载又称为伪方法重载,伪方法重载:python中,默认不提供方法重载,但是在高级封装的过程中,又出现了类似方法重载的代码语法,所以~称之为伪方法重载,语法如下:
>>> @property
>>> def name(self):
>>> return self.__name
>>> @get_name.setter
>>> def name(self,n):
>>> self.__name=n
这里有两个函数名为name的函数,虽然有不同的函数作用,但是函数名相同,参数不同,这种方式成为伪方法重载,在类外调用时,跟对象的使用方式一样,所以可以很好的隐藏工作方法
将对象的数据与操作数据的方法相结合,通过方法将对象的数据与实现细节保护起来,就称为封装。外界只能通过对象的方法访问对象,因此封装同时也实现了对象的数据隐藏。
在使用面向对象的封装特性时,需要:将内容封装到某处,和从某处调用被封装的内容
总体来说,封装的意义就是实现了对象的数据隐藏