*Python面向对象--封装

所谓封装就是对外部世界隐藏对象的工作细节

今天老师讲了四个例子,由简入繁,由浅入深详细分析了封装的意义及用法

例1:

>>>classPerson:#定义一个person类

>>>def__init__(self, name, age):初始化对象的属性

 >>>self.name=name

  >>> self.age=age

>>>p=Person("tom",12)#声明一个对象

>>>print(p.name, p.age)#打印

>>>p.age=13#Python中可对属性操作

>>>print(p.age)

第一个例子说明Python的简单封装并不稳定,属性可被更改

例2:

>>>classHero:

>>>def__init__(self, name, age):例2大体和例1 差不多但是不同的是属性封装成__(属性名)

>>>self.__name=name               这种是把属性定义成私有属性在类外不可任意修改或其他操作

>>>self.__age=age                    想对私有属性操作需要声明特定的函数

>>>defget_name(self):#定义get函数,使其能在类外获取属性的值

>>>returnself.__name

>>>defset_name(self, name):#定义set函数,使其能在类外修改属性的值

>>>self.__name=name

>>>h=Hero("jack",11)

>>>print(h.get_name())

>>>h.set_name("fuck")

>>>print(h.get_name())

例2主要是对例1 的强化封装,能很好的隐藏对象的属性,不能轻易获取和修改

例3:

>>>classMan:

>>>def__init__(self, name, age):

>>>self.__name=name#例3是对例2的升华,在原有的基础上增加了@property和

>>>self.__age=age        @().setter把函数转为对象使用,更好的隐藏了工作细节

>>>@property                 封装的更加隐秘

>>>defget_name(self):

>>>returnself.__name

>>>@get_name.setter

>>>defset_name(self, name):

>>>self.__name=name

>>>m=Man("lll",18)

>>>print(m.get_name)

>>>m.set_name="sdbfdb"

>>>print(m.get_name)

本例子不但把属性隐藏了,还隐藏了工作细节,在类外调用时把函数隐藏,封装的更加严密

例4:

>>>classWoman:

>>>def__init__(self, name, age):

>>>self.__name=name#这是最终版,在例3 的基础上增加了函数的重载这时当我们调用了

>>>self.__age=age       函数,但是在函数外表现出来的确实对属性的更改,增加了代码的

>>>@property               保密性

>>>defname(self):

>>>returnself.__name

>>>@name.setter

>>>defname(self, name):

>>>self.__name=name

>>>w=Woman('hello',1)

>>>print(w.name)

>>>w.name="wold"

>>>print(w.name)

本例子增加了函数的重载,真正意义上隐藏了对象的工作细节,实现了封装,每个类都有自己的构造方法__init__,我对每一个类都进行实例化一个对象;每个对象创建的时候会自动调用自己的__init__方法封装不同的内容

这里我们把重点放在这个@property这里,在C++或者Java中,我们经常会遇到setter和getter,在这里@property的作用类似,需要注意的是,这里面的同一属性的三个函数要同名(本例中指的是name),当我们在运用的时候,就可以根据需要,例如是否只读等进行设置

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

推荐阅读更多精彩内容

  • 面向对象——封装 一、概述 Python面向对象的三大特性:封装、继承和多态。 封装:在类中对数据的赋值、内部调用...
    冬日里的月光阅读 281评论 0 0
  • 封装:将一堆零碎的东西封箱装起来! 为什么需要封装?封装的作用和含义? 比如:①我要看电视,只需要按一下开关和换台...
    云Shen不知处阅读 312评论 3 0
  • 20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...
    iOS_恒仔阅读 2,314评论 1 6
  • 体验入:今天办理接别人公司后的一切负担事,切记不能接公司执照,,要么请律师,要么换新照 找核心;了解事物的全过程及...
    熊毅滨1349阅读 102评论 0 0
  • 彷徨的飞蛾,看到摇曳的火焰 定会奋不顾身,在它心动的时刻 蜷曲的蚕蛹,嗅到花朵的芳香 定会破茧而出,在它心动的时刻...
    李明见阅读 291评论 1 2