美文网首页
[Python]面向对象之封装的意义和操作过程

[Python]面向对象之封装的意义和操作过程

作者: 岁月神偷_bde8 | 来源:发表于2017-09-05 20:53 被阅读0次

    1、封装的概念

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

    2.封装的意义

           对象中的成员属性如果没有被封装,一旦对象创建完成,就可以通过对象的引用获取任意的成员属性的值,并能够给所有的成员属性任意赋值。在对象的外部任意访问对象中的成员属性时非常危险的,因为对象中的成员属性是对象本身具有的与其他对象不同的特征,是对象某个方面性质的表现。例如,“电话”的对象中有一些属性值是保密技术,是不想让其他人随意能获取到的。在比如,在”电话”对象中的电压和电流等属性的值,需要规定在一定的范围内,是不能被随意赋值的。如果对这些属性赋一些非法的值,例如手机的电压赋上380V的值,就会破坏电话对象。

           对象中的成员方法如果没有被封装,也可以在对象的外部随意调用,这也是一种危险的操作。因为对象中的成员方法只有部分是给外部提供的。保留有限的对外接口使之与外部发生联系。而又一些事对象自己使用的方法。例如,在”人”的对象中,提供了”走路”的方法,而”走路”的方法又是通过在对象内部调用”迈左腿”和” 迈右腿”两个方法组成。如果用户在对象的外部直接调用” 迈左腿”或” 迈右腿”的方法就没有意义,应该只让用户能调用”走路”的方法。

           封装的原则就是要求对象以外的部分不能随意存取对象的内部数据(成员属性和成员方法).从而有效地避免了外部错误对它的”交叉感染”,是软件错误能够局部化,大大较少差错和拍错的难度。

    3.如何实现封装?

    3.1封装实现的步骤

           1.完成一个类的定义

           2.所有属性私有化

           3. 给每个属性提供set/get方法

    例如:

    # 定义了一个商品类型,封装和商品有关系的数据

    class Goods:

           def __init__(self, name, price, stock):

                     self.name = name

                     self.price = price

                     self.stock = stock

    #封装具体的数据到对象中:对象是通过类型来封装具体的数据的

    g1 = Goods(“连衣裙”, 199, 120)

    # 将对象敏感的数据,封装在类的内部,不让外界直接访问;而是通过定义的set/get方法来间接访问内部的数据的过程,此时,就可以在set/get方法中,添加条件限制代码!

    例如:

    classPerson:

            def__init__(self, name, age):

                       self.__name = name

                       self.__age = age

            def set_name(self, name):

                       self.__name = name

            def get_name(self):

                       returnself.__name

            def set_age(self, age):

                      if age >= 0 and age <= 100:

                            self.__age = age

                     else:

                           print("设置的年龄不合法...")

            def get_age(self):

                     returnself.__age

            def __str__(self):

                     return"姓名:%s;年龄:%s"% (self.__name,self.__age)

    相关文章

      网友评论

          本文标题:[Python]面向对象之封装的意义和操作过程

          本文链接:https://www.haomeiwen.com/subject/zeypjxtx.html