范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Python面向对象编程之封装的艺术

  1. 面向对象编程
  OOP ( Object Oriented Programming) 即面向对象编程。
  面向对象编程是一种 编码思想 ,或是一种 代码组织方式 。如同编辑文章时,可以选择 分段、分节 的方式让文章看起来有层次、更方便阅读或修改。
  编码时可以选择使用 OOP 方案,也可以选择不使用。如同行文一样,使用或不使用都不会对 核心逻辑 产生影响。
  面向对象编程有自己的核心编码理论,对于任何一种计算机语言而言,如果选择支持此理论, 则称此计算机语言支持面向对象编程 。如 C++、Java、Python……
  因每一种计算机语言语法上的差异性,在提供 OOP 实现时的 语法规范 会有很大的区别。除此之外,对于每一种语言而言,也可以在  OOP  基础理论上进行语法扩展或限制。如 Python 支持多继承。而 Java 语言只支持单根继承…… 1.1 OOP 特点
  要了解  OOP  的特点,可从 2 个角度进行阐述。
  广义角度: 让程序像人类解决问题一样去解决问题,让程序具有人的思维模式。
  人类解决问题时,先是要了解问题域中会涉及到 哪些对象 ,然后再深入了解 每一个对象的特性或功能, 最后再做出相应的决策。
  比如:为班级选一名班长。
  选班长 就是现实世界的一个问题域,如何才能选择一名符合要求的班长? 首先确定此问题中涉及的对象(此处便是班上的所有学生)。 然后了解每一个学生的兴趣、爱好、性格……以及个人能力等等。 从了解的群体中匹配一个符合 班长标准 的学生便可。
  面向对象编程中的 对象一词 ,便是借鉴了现实世界中对象概念。
  狭义角度: OOP 编码为整个程序维护带来的优势
  OOP 组织的代码可让程序整体上有高度的可阅读性,除此之外,最主要的特点是可提高代码的 复用性、安全性、可扩展性。
  任何事情都会 2 面性,OOP 会增加代码的理解难度。 1.2 OOP 基本概念
  OOP 中有两个很重要的概念, 类和对象 。
  对象从何而来?
  现实世界中我们很少思考这个问题,在 选班长时 ,不会思考学生是从哪里来的,即使思考这个问题,也会认为那是哲学家的事情。
  我们不思考现实世界中的手机、电脑、电视机是怎么来的……因为我们不关心这个,我们关心的是使用它们所提供的功能。
  如果我们思考一下手机是怎么出现的,则会发现: 首先需要工程师设计手机蓝图。 在工厂里根据手机蓝图进行生产(可能生产很多)。 用户购买手机,了解手机特性和功能,使用手机。
  我们身边的诸如 电视机、洗衣机、电脑……无不例外的需要经过这几个过程后方能来到我们的世界。
  即使是人也是女娲按自己的样子创建出来的……
  同理,电脑世界里不会突然冒出手机、电脑、学生……如何才能让电脑出现此类对象。一样,先设计一个蓝图,此蓝图在电脑世界我们就称其为 "类" 。
  有了 "类" 之后才可以 创建手机对象 ,有了对象后才能在程序代码中使用设计时为手机赋予功能完成程序逻辑。
  现实世界设计手机蓝图时,需要设计手机的外观,如大小、形状、体重……需要赋予手机功能、如打电话、播放音乐、播放视频、上网……
  在计算机的编码世界里,同样在设计类时需要为 "手机类" 设计外观和功能。 OPP 中称外观为属性,称功能为方法。 类是蓝图,具有抽象性特征
  对象是根据蓝图创建出来的个体,具有具体性、实用性特征 2. Python 实现 OOP
  如需使用 OOP 理念实现程序逻辑,则需遵循如下流程: 2.1 分析问题
  首先需要明确问题: 如编写一个程序摸拟小狗的行为。
  此问题中的对象便是小狗,所以程序中需要一只小狗。
  按上所述,创建小狗之前需要设计"狗类",因此需要为类的设计提供足够的信息。
  分析可得在设计类时需要有小狗属性:姓名、年龄,小狗的行为:尊下、打滚。 2.2 类设计语法class Dog():       def __init__(self, name, age):         """初始化属性name和age"""         self.name = name         self.age = age       def sit(self):         """小狗蹲下行为"""         print(self.name.title() + " 乖乖的尊下了!")       def roll_over(self):         """小狗打滚"""         print(self.name.title() + " 开始打滚哈!")
  如上为 python 中类设计的结构语法: 类的函数称为方法,方法的第一个参数须是  self 关键字。 __init__  方法是必须的,其方法名不得修改。 此方法会在创建对象时被自动调用,用来初始化对象数据。 self.name 声明一个对象变量,此变量会保存对象的数据。 2.3 创建对象语法
  有了类后,方可创建对象,有了对象后方可激活属性和方法。 my_dog = Dog("小雪", 6) print("小狗的名字:"+my_dog.name.title()+".") print("小狗今年"+str(my_dog.age)+" 岁了")my_dog.sit() my_dog.roll_over()
  创建小狗时,需调用和 类名相同的方法 ,如上述的  Dog( )  方法,此方法也叫 构造方法 ,此方法实质是调用了类设计中的  __init__  方法。所以需要传递小狗的具体姓名和年龄初始 name 和 age 变量。
  调用类中的方法时,不需要为方法声明时的 self 参数传递值。
  有了对象后,如需要使用此对象的数据时,可使用  .  运算符。如上 my_dog.name 得到小狗的姓名。
  当然,在创建小狗后,也可以根据需要 修改小狗的姓名和年龄。 my_dog.name="小花"
  my_dog.age=4
  同样,也可以使用 . 运算符调用类设计时的方法。调用方法也不需要为第一个参数 self 传值。
  运行结果: 小狗的名字:小雪. 小狗今年6 岁了 小雪 乖乖的尊下了! 小雪 开始打滚哈!
  有了类之后,可以根据此类的设计方案,创建出多个对象。每一个对象有自己的数据空间,彼此之间的数据是独立且隔离的。 my_dog = Dog("小黑", 6) your_dog = Dog("小白", 3) print("我的小狗的名字: "+my_dog.name.title()+".") print("我的小狗的年龄 "+str(my_dog.age)+"岁了.") my_dog.sit() print(" 你的小狗的名字: "+your_dog.name.title()+".") print("你的小狗的年龄 "+str(your_dog.age)+" 岁了.") your_dog.sit()
  如同现实世界一样。现在有了 2 只小狗,它们是独立的个体。修改其中一只狗的名字,对另一只小狗是没影响的。 我的小狗的名字: 小黑. 我的小狗的年龄 6岁了. 小黑 乖乖的尊下了!   你的小狗的名字: 小白. 你的小狗的年龄 3 岁了. 小白 乖乖的尊下了!3. OOP 的封装性
  封装性可以从 2 个角度上展开讨论: 3.1 广义角度:无处不封装
  类就是一个封装体:它把 数据 以及对 数据的相关操作 方法封装在了一起。
  方法也是一个封装体: 封装了代码逻辑 。
  封装的优点!
  当我们通过对象使用 数据和方法 时,不需要了解其中的内部细节,如此实现了 设计和使用 的分离,和现实世界中我们使用手机一样,不需了解手机的内部结构和细节。
  开发者在使用 python 提供的模块时,不需要了解模块中的相关实现细节,直接使用其功能便可。
  设计和使用的分离能加速工业软件的开发效率。 3.2 狭义角度:保证内部数据的完整性
  创建一只小狗后,可以编写如下代码修改小狗的年龄。 my_dog = Dog("小雪", 6) my_dog.age=-4
  显然这是不符合实际情况的,没有一只小狗的年龄可以是负 4 岁。但是,现在程序可以正常运行。 小狗今年-4 岁了
  出现这样不合常理的想象,应该追究谁的责任。 类的设计者还是对象使用者?
  我们应该要追究类设计者的责任,就如同我刚买的手机不能充电一样,是设计者的设计缺陷引起的。
  我们应该在设计类的时候提供一种内部安全检查机制,保护 变量 能被赋予一个正确的、可靠的值。
  实施流程:
  1. 在变量、方法的前面加上双下划线(__)让变量成为私有概念
  python 的语法有很大的弹性。添加下划性只是一种象征性或类似于道德层面的约定。并不能真正意义上让外部不能访问。 lass Dog():       def __init__(self, name, age):         """初始化属性name和age"""         self.name = name
  #私有化         self.__age = age       def sit(self):         """小狗蹲下行为"""         print(self.name.title() + " 乖乖的尊下了!")       def roll_over(self):         """小狗打滚"""         print(self.name.title() + " 开始打滚哈!")
  2. 在类中提供对应的 set 和 get 方法实现对内部变量的保护。     def get_age(self):         return self.__age
  # 对数据进行检查     def set_age(self, age):         if age<0:             print("小狗的年龄不可能为负数")             return         self.__age = age
  3. 测试 my_dog = Dog("小雪", 6) my_dog.set_age(-4)   print("小狗的名字:"+my_dog.name.title()+".") print("小狗今年"+str(my_dog.get_age())+" 岁了")
  输出结果 小狗的年龄不可能为负数 小狗的名字:小雪. 小狗今年6 岁了
  python 还有一种更优雅的解决方案。使用注解方式。 class Dog():       def __init__(self, name, age):         self.name = name         # 私有属性,属性名(age)前面双下划线的名称         self.__age = age       # 实例方法     def run(self):         print("{} 在跑……".format(self.name))       # 使用 @property 定义age属性的 get 方法     @property     def age(self):         return self.__age       # 使用 @age.setter 定义 age 属性的 set 方法必须放在@property的后面     @age.setter     def age(self, age):         if age < 0:             print("小狗的年龄不能是负数")             return         self.__age = age   #实例化小狗 dog = Dog("小红", 3) print("{0} 狗狗的年龄是 {1}".format(dog.name, dog.age))
  #修改年龄 dog.age = -4 print("{0} 狗狗的年龄是 {1}".format(dog.name, dog.age))
  输出结果 小红 狗狗的年龄是 3 小狗的年龄不能是负数 小红 狗狗的年龄是 3
  4 . 总结
  面向对象编程可以用《人类简史》中的一句话总结,人类文明的进步不一定能泽福到每一个个体。
  类可以设计的很完美,但每一个对象作为个体可以有自己的命运。
  封装是面向对象编程理念中最基本也是最重要的特性,没有封装便没有后续的更多。
  封装可以让我们把相关联的数据与方法构建成一个逻辑上的整体,也可保护内部数据的安全性,毕竟没有数据安全性的程序是没有意义的。
  原文地址 https://www.cnblogs.com/guo-ke/p/15938119.html

东风标致408你想要的安全感我给你汽车,对很多人来说是除了家和办公室以外的第三空间。家是最安全的庇护所,公司则配备了各种措施保证人身安全,并带来健康舒适的环境。作为日常代步,穿梭城市的出行伴侣,汽车的安全问题也在不将复古进行到底,欧拉闪电猫,专为女性定制女性对美的事物是不能抗拒的,对自己的爱车要求当然也是如此,不仅要实用,颜值方面更不可缺。下文小编就为您带来一款专为女性定制的完美车型欧拉闪电猫。从外观整体来看,慢慢的跑车风,整个车亦商宜家,MPV最优选,别克GL8ES陆尊别克GL8家族分别有艾维亚陆尊以及陆上公务舱,谈起别克GL8无疑是MPV市场上的王者,常年位居MPV领域销量榜单中,可见别克GL8各方面不俗的实力,以及消费者对于它的认可度之高,今新款沃尔沃XC90,承载家庭温暖的座驾近日,北欧豪华旗舰型SUV沃尔沃新款XC90再度焕新而来。自上市以来,沃尔沃XC90凭借一脉相承的斯堪的纳维亚美学设计令人心旷神怡的剧院式7座空间直观的人车交互体验,澎湃动力赋予的电动车行业领导者,东风本田eNS1,惊喜上线随着时代的不断变迁,人们对汽车的购买不单单只选择然后,电动也是不错的选择,如果大胆地猜测电动汽车将在未来成为主导,下文小编为您带的是东风本田eNS1。从外观上来看,前脸的格栅采用的精巧但不失实用,五菱宏光MINIEV敞篷版,精致来袭五菱宏光给人们的惊喜是您远远想不到的,最初的五菱神车,到现在的电动五菱宏光mini,再到五菱宏光miniEV,但这并不是五菱想要的结果。我们的纯电动五菱宏光MINIEV敞篷版它要来将安全刻在骨子里,标致508L如何做到?安全,是汽车界永恒不变的话题。为了让用户和消费者对安全出行有足够的信心,如今汽车厂商纷纷通过各种高难度的安全测试碰撞测试,展示车身强度等安全实力。去年年底,一台标致508L举行了一这就是折叠屏旗舰手机行业标准!华为MateX2极致畅享体验随着5G时代的到来,在手机配置上我们对大屏的需求越来越强烈。华为于2月25日1008正式开售了一款新一代折叠产品华为MateX2。其集合了行业最领先的技术与最前沿的设计理念,很多人堪称旗舰标杆华为MateX2定义折叠屏旗舰手机行业标准近年来,折叠屏手机的出现颠覆了人们的想象,承载着人们对未来的期待。继华为发布第一代折叠屏手机后,经过不断地改良创新,打造出更加成熟的产品。2月25日1008,华为MateX2正式开苹果手机虽好,但这两类人不建议入手,别再傻傻入坑了作为一个从iPhone7用到现在的我老果粉,毫不夸张地说,苹果手机的综合体验无疑是最好的。不过我好心劝告这两类人不建议入手,别再傻傻入坑了!首先商务人士并不建议入手,因为虽然iPh200克的智能手机遍地都是!为什么这款手机你一定没见过二百克的智能机各大智能机厂家为了能让购买者获得更出色的视觉体验,因此现如今制造出来的智能机的手机屏也是越来越大了,还有就是部分消费者在选购智能机的时候基本上都会在意电量问题,因此现
拍拍贷借款可靠吗?用十四年行动展示这些年网络借款平台数量剧增,发展态势异常火爆。网络借款最大的优越性是使传统银行难以覆盖的借款人,在虚拟世界里能充分享受借款的高效与便捷。拍拍贷也随之走进大家的视野,对此大家可能更关森田洗护水解蚕丝蛋白的奥妙森田洗发水先养后洗的新概念怎么样?森田的洗护产品对受损头发的修复作用很好,是为什么呢,本文对于洗护产品的成分做个分析,精彩不容错过,感兴趣的朋友请仔细阅读,一起涨知识首先,我们说下蚕丝蛋白(Fibroin)又名丝素撬装加油站如何合法化?这个问题问得好,如果正常的申报手续,本身企业能够申请下来橇装加油站(企业加油站)就是一条合法建立企业内部加油站的正确路径。撬装加油站(企业加油站)也叫(阻隔防爆橇装加油站)是集储存微信支付与传统商业正在发生的化学反应(上)作为第三方支付工具的微信支付,不仅成了流量入口,而且还在一定层面上改变了传统零售旧有的商业模式,微信支付产品运营总监黄丽从三个层面总结这这种改变一是,用户端引领所有的用户进入无现金Q2季度净利润下滑22,京东的钱花去了哪?文王亚琪编辑斯问8月23日晚间,京东发布2021年第二季度及中期财务业绩报告。在3月到6月的第二季度,京东营收2538亿元,同比增长26。2,超出了市场预期。单季度新增3200万年微信支付与传统商业正在发生的化学反应(中)核心阅读作为第三方支付工具的微信支付,不仅成了流量入口,而且还在一定层面上改变了传统零售旧有的商业模式,微信支付产品运营总监黄丽从三个层面总结这这种改变一是,用户端引领所有的用户进微信支付与传统商业正在发生的化学反应(下)核心阅读作为第三方支付工具的微信支付,不仅成了流量入口,而且还在一定层面上改变了传统零售旧有的商业模式,微信支付产品运营总监黄丽从三个层面总结这这种改变一是,用户端引领所有的用户进移动办公新风向,华为MateBookE体验,这才是我想要办公神器工欲善其事,必先利其器,在选择生产力工具上,我一向都很明智,只要它能让我在工作的时候更方便,更有效率,那么我一定会优先考虑。每个月我都要出差几次,平时写方案PS剪视频都是在电脑上完液冷散热麒麟980,华为平板M6高能版发布畅玩游戏更顺手前段时间科隆游戏展上,PC游戏大厂纷纷推出了自家手游。高画质的手游既是移动游戏时代对游戏厂商的考验,也是对玩家设备的一场测验。玩家想要在手游世界中畅快驰骋,就需要一台得心应手的装备跟卡顿说saygoodbye!华为方舟编译器让安卓重获新生在智能手机时代,Android系统由于底层代码冗余,因而备受卡顿的诟病,甚至形成了足够坚固的偏见,让很多品牌都一直背负着沉重的包袱。但总有品牌能够在逆境生长,通过创新为自己也为行业OPPOK3电波蓝配色实拍图赏,这样的神仙颜值,你心动了吗?8月1日,OPPO上线了K3的新配色电波蓝,OPPOK3摘掉了高价低配的帽子后,也成为当下最火爆的的千元价位的手机。OPPOK3采用了升降全面屏设计,没有水滴,没有挖孔,从而拥有高