*面向对象的特征——封装的意义和操作过程

封装是对全局作用域中其它区域隐藏多余信息的原则。

封装听起来有些像多态,因为他们都是 抽象的原则---他们都会帮助处理程序组件而不用过多关心多余细节,就像函数做的一样。但是封装并不等同于多态。多态的可以让用户对于不知道是什么类(或对象类型)的对象进行方法调用,而封装是可以不用关心对象是如何构建的而直接进行使用。

创建一个有对象(通过像调用函数一样调用类)后,将变量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的函数,虽然有不同的函数作用,但是函数名相同,参数不同,这种方式成为伪方法重载,在类外调用时,跟对象的使用方式一样,所以可以很好的隐藏工作方法

将对象的数据与操作数据的方法相结合,通过方法将对象的数据与实现细节保护起来,就称为封装。外界只能通过对象的方法访问对象,因此封装同时也实现了对象的数据隐藏。

在使用面向对象的封装特性时,需要:将内容封装到某处,和从某处调用被封装的内容

总体来说,封装的意义就是实现了对象的数据隐藏

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容