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

封装的操作过程和意义

作者: 云Shen不知处 | 来源:发表于2017-07-27 21:00 被阅读0次

    1.面向对象的特征——封装

    封装”就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体(即类);封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。

    将对象敏感的数据封装在类的内部,不让外界直接访问,而是通过当前类提供的set/get方法间接访问数据,此时就可以在set/get中添加限制条件进行访问数据的控制。

    1.类的属性

    类由属性和方法组成,类的属性是对数据的封装,而类的方法是对类的行为的封装。

    类的属性按使用范围分为共有属性私有属性。具体地,在Python实现面向对象的编程思想的时候,封装在类中的属性可以分为两种:数据类的属性数据对象的属性(也可以成为数据类的成员变量和属于对象的成员变量),其中,这两种成员变量又各自分为共有成员变量和私有成员变量。

    2.类的成员变量和对象的成员变量

    类的成员变量定义在类中,和类的成员函数在同一缩进等级。而对象的成员变量定义在init(self)成员函数中,和init(self)函数下的变量和语句在同一等级。通俗地讲,类的成员变量属于类,共类的所有对象和类本身所共有,也就是说所有的类的对象和类只有一份这样的变量。而对象的成员变量属于类的对象本身,每个对象都有一份,而且各个对象之间互不影响。

    3.封装实现的步骤:

    定义类型,封装零散数据【抽象的属性】

    [使用__slots__属性,限制当前类的属性列表à为了代码的统一性]

    所有属性私有化【属性使用双下划綫开头,外界就不能直接访问这样的属性了】

    给每个属性提供set/get方法,在方法中添加限制条件

    1.class Users(object):

         def__init__(self,name):

           self.name = name

    u = Users("tom")

    print(u.name)

    u.name ="jerry"

    print(u.name)

    2.封装私有化,提供set/get函数

    class Person(object):

    def__init__(self,name):

           self.__name = name

    def set_name(self,name):

         self.__name=name

    def  get_name(self):

         return  self.__name

     p = Person("shuke")

    print(p.get_name())

    p.set_name("jerry")

    print(p.get_name())

    3.高级封装

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

    class Computer(object):

             def__init__(self,name):

             self.__name = name

    @property

    def  get_name(self):

    returnself.__name

    @get_name.setter

    def set_name(self,name):

           self.__name = name

    c = Computer("dell")

    print(c.get_name)

    c.set_name ="hp"

    print(c.get_name)

    4.实现对方法的封装

    在封装的过程中,除了封装私有属性,还可以针对一些底层的操作方法进行私有化,将方法封装在类的内部,通过提供的一个公共方法来控制该方法的访问权限

    class Animals(object):

             def__init__(self,name,age):

            self.__name = name

             self.__age = age

    @property

    def name(self):

          return self.__name

    @name.setter

    def name(self,n):

          self.__name = n

    @property

    def age(self):

           returnself.__age

    @age.setter

    def age(self,a):

           if (a >=0)and(a <=20):

                     self.__age = a

          else:

                     print("年龄输入不合法..")

    a =Animals("tiger",10)

    a.name ="monkey"

    print(a.name)

    a.age =22

    print(a.age)

    封装的作用:一个是保护隐私,一个是降低程序复杂度,提高程序健壮性

    相关文章

      网友评论

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

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