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

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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.面向对象的特征——封装 封装”就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体(即类);封装的目...
    云Shen不知处阅读 648评论 0 0
  • 20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...
    iOS_恒仔阅读 2,337评论 1 6
  • 封装 将对象敏感的数据封装在类的内部,不让外界直接访问,而是通过当前类提供的set/get方法间接访问数据,此时就...
    零_WYF阅读 444评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • 我大三的时候,得了玫瑰糠疹。这种病虽然不会传染,但很难根治。皮肤莫名其妙的红肿、发痒、溃烂,最后皮肤跟枯萎...
    涵情墨墨阅读 1,170评论 0 4