美文网首页
面向对象的特征——封装的意义和操作过程

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

作者: 零_WYF | 来源:发表于2017-07-27 20:45 被阅读11次

    封装

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

    封装实现的步骤:

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

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

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

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

    class Person:

           def __init__(self,name,age):

                  self.__name = name

                  self.__age = age

           def set_name(self,name):

                   self.__name = name

           def get_name(self):

                  return self.__name

           def set_age(self,age):

                  self.__age = age

           def get_age(self):

                  return self.__age

    p = Person("问问",11)

    print(p.get_name(),p.get_age())

    p.set_name("好好")

    p.set_age(33)

    print(p.get_name(),p.get_age())

    高级封装

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

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

    class Person:

           def __init__(self,name,age):

                  self.__name = name

                  self.__age = age

           @property

           def get_name(self):

                     return self.__name

            @get_name.setter

            def set_name(self,name):

                      self.__name = name

             @property

             def get_age(self):

                      return self.__age

             @get_age.setter

             def set_age(self,age):

                       self.__age = age

             def eat(self):

                       print("吃1234567")

    p = Person("问问",11)

    print(p.get_name,p.get_age)

    p.set_name = "好好"

    p.set_age = 33

    print(p.get_name,p.get_age)

    p.eat()

    对方法的封装

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

    class MsgManagerment:

              def __sen_vilidata_code(self,code):

              print("发送验证码%s" % code)

              def sen_msg(self,type,code):

                        if type == "1":

                                  self.__sen_vilidata_code(code)

                                  return 0

                       else:

                                  return "没有权限"

    m = MsgManagerment()

    re = m.sen_msg("2","12345789")

    print(re)

    相关文章

      网友评论

          本文标题:面向对象的特征——封装的意义和操作过程

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