封装的意义和操作过程

封装是面向对象的三大特征之一,就是将对象敏感的数据,也就是对象不想让别人知道的东西给封装在类的内部,封装过后的数据,外界不可以直接访问,如果想要访问可以通过类提供的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中,默认不提供方法重载,但是在高级封装的过程中,又出现了类似方法重载的代码语法,所以~称之为伪方法重载。

对方法的封装

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

你可能感兴趣的:(封装的意义和操作过程)