美文网首页
封装的意义和操作过程

封装的意义和操作过程

作者: 遇见陌生 | 来源:发表于2017-07-28 12:30 被阅读0次

    封装是面向对象的三大特征之一,就是将对象敏感的数据,也就是对象不想让别人知道的东西给封装在类的内部,封装过后的数据,外界不可以直接访问,如果想要访问可以通过类提供的set/get方法间接访问数据,这样就可以在set/get方法中添加条件限制,这样一来代码的可读性提高的同时,也增强了代码的安全性。

    封装的步骤:

    1.进行类的定义(将零散的数据封装起来,抽象的属性)

    2.使用__slots__魔法属性,限制当前类的属性列表,不让外界随意添加和修改属性。

    2.将所有属性通过双下划线私有化,这样外面就不可以直接访问了。

    4.给每个属性添加set/get方法,在方法中添加限制条件。

    高级封装

    使用@property和@get_method.setter注解,来注释set/get方法,隐藏set/get方法的实现,让方法的使用方式和属性一致。

    例如:

    没有使用@property和get_method.setter的程序

    class  User:

             def__init__(self,name):

                         self.__name=name#属性私有化

              def set_name(self,n):   #set方法设置名字

                     self__name=n

               def get_name(self):  #get方法获取名字

                    returnself.__name

    u=User("Tom")   #创建一个对象

    print(u.get_name())

    u.set_name("老猫")           #使用对象的set方法

    print(u.get_name())            #使用get方法获取name

    使用@property和get_method.setter方法的程序

    class Goods:

               def__init__(self,name,price):

                        self.__name=name               

               @property

               def get_name(self):

                       returnself.__name

                @get_name.setter

                def  set_name(self,n):

                         self.__name=n

    g=Goods("T恤",120)    #创建一个商品对象

    print(g.get_name)        #获取name

    g.set_name="衬衫"       #设置name

    print(g.get_name)          #获取name

    从上面可以看出,两种方法虽然没存在什么差别,但是仔细看还是能发现的,有没有发现加了@property的方法可以像属性一样使用,直接赋值和得到,没有了小括号这个东西,这样的好处是隐藏了set/get方法,使方法能像属性一样被使用。 通过@property和@get_method.setter隐藏方法的实现,提高代码的安全性。不过它和访问方法的操作,没有什么区别,仅仅是一种语法糖!仅仅将数据访问方法和普通的方法进行了区分!

    伪方法重载:python中,默认不提供方法重载,但是在高级封装的过程中,又出现了类似方法重载的代码语法,所以~称之为伪方法重载。

    对方法的封装

    在封装的过程中,除了封装私有属性,还可以针对一些底层的操作方法进行私有化,将方法封装在类的内部,通过提供的一个公共方法来控制该方法的访问权限,将方法私有化是在方法名称的前面加上双下化线,这样就将方法给封装起来,可以在其他方法中对它增加条件限制!

    相关文章

      网友评论

          本文标题:封装的意义和操作过程

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