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

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

OPPO宣布与印度航天机构合作,非议马上来了印度国家航天机构印度空间研究组织(ISRO)与中国手机品牌Oppo印度公司的合作在当地引发非议。据印度斯坦时报等多家媒体报道,印度反对党国大党和许多网民在社交媒体上质疑,当ISRO去年年薪百万今年行业失散,高途坠落背后的情怀烧钱和人性战场这里的故事都不算新鲜。中国互联网几十年发展过程中,风口变幻,高途用很短的时间演示了一家发现蓝海,投身而入的公司又如何被迅速抛下。在它的故事里,可以看到大佬的创业情怀,和瑞幸相似的被汇科学暖流建创新高地大湾区科学论坛在广州开幕汇科学暖流建创新高地冬日湾区,温暖如春。以探索未来,共享科学为主题的大湾区科学论坛,12月11日在广东广州开幕。大湾区科学论坛由一带一路国际科学组织联盟发起当996成为一种奢望,互联网大厂的梦碎时刻皮之不存,毛将焉附。当互联网行业内的企业在中概股遭遇重挫,与之对应的是,那些在互联网公司上班的员工们,也随公司一起,走进了这个空前寒冷的冬天。当宏观经济的不景气终于传导到了个人身上手把手教你一句话让小爱帮你控制智能家居!全网最细教程小伙伴们大家好!之前两期我们学习了智能家居的更换与连接,今天我们来学习如何设置智能家居的联动,让你学会如何一句话让小爱同学帮你打开各种智能设备,还有各种场景的设置,例如回家自动开灯入手OPPOReno7Pro几天,聊聊我对它的使用感受作为OPPO旗下面向时尚年轻群体的Reno系列,每款机型的出现都吸引了无数年轻时尚消费者们的关注与追捧。而笔者也同样是其中的一个,在这次OPPOReno7Pro首销当天,我就直接花华为watch3和watchgt3差别?要想了解华为watch3和watchgt3差别,那么我们先看看他们两个是啥配置,话不多说,直接上图。华为watchgt3华为watchgt3华为watch3华为watch3通过两张OPPO手机怎么选,什么款性价比高,拍摄怎样,一文解答前段时间,刚梳理完蓝厂vivo与其子品牌iQOO,这一次来到绿厂阵营OPPO系。vivo手机怎么选,哪款性价比高,哪款值得买,一篇文章来梳理OPPO系包括主品牌OPPO,子品牌re德媒评选2021最佳手机TOP10六款国产手机上榜,一加表现抢眼严谨的德国媒体Connect在近日评选出了2021年度最佳手机TOP10,评选了今年市面上正在销售的手机,且仅包含安卓手机,因此你会在这份榜单中看到去年的老旗舰,因为在今年它们依然路由器要多久关闭一次?多亏宽带师傅告诫,难怪网速变龟速了畅谈关于装修的那些事,分享装修的各种经验和知识。大家好,我是畅谈装修,关注我即可了解更多关于装修的那些事!路由器现在已经是居家生活中不可缺少的伙伴,没有了它,相信连饭吃得都不香了。网曝三星GalaxyS22系列将于年初发布,超大杯改名了年底了,手机行业也都在为来年的新机做宣传了,隔三差五频频爆出某某品牌某某新机的相关信息,最近,有网友爆料,三星明年的旗舰新机GalaxyS22系列将要来了,而其中的超大杯不再采用G
价格不决定质量?小伙十万买一辆泡水保时捷要说哪款汽车保值率高,大家可以去二手车市场了解一下,毕竟在二手车市场中能够了解同款汽车的保值率,但是二手车水很深,不懂行的朋友还是不要接触。随着汽车报废年限的取消,二手车市场发展变自动挡上坡时,挂d档踩油门一直往上开,是错误的吗?大家都知道在汽车的驾驶类型中,分为自动挡和手动挡,出于不同的需求,每个人的选择都不同。若是车主追求驾驶感,那么手动挡的汽车是首选,毕竟汽车在挂挡时的吸入感很强,这样驾驶起来可以自己创维电视看CCTV直播教程,央视频道分分钟搞定随着近期6。18的来临,家用电器大促销买了最新创维电视的朋友,还没安装数字或有线电视,电视盒子也没有,就会问那我怎么看央视频道?智能电视的起兴,让你不在需要数字电视就能直接看电视节为了拍摄这部漫改电影,清空整个东京,场景太震撼了今年有一部漫改作品棋魂给观众带来了很大的惊喜,虽然说它是一部国产的网剧,但是它真的做到了高度的还原,不管是剧情还是人物设定还是场景服装,都让人很惊喜!本以为今年的漫改作品可能就这么长津湖电影里没有韩军,所以拍的假?事实是,韩军逃跑得太快众所周知,由徐克林超贤等三位导演以及吴京等多名知名演员参与的电影长津湖在国庆档取得了相当优秀的票房成绩。根据相关统计,截止到10月14日,长津湖的总票房已经突破46亿。作为一款主旋10。13BTC走势今天下午两个利空消息,币安还有欧易都清退中国市场用户,比价也是来了一拨大下跌,我们从日线来看,今天走势和昨天一样,KDJ也是死叉向下的走势,macd多头缩量,币价还会下跌,四小时级居家生活好帮手,小司精灵智能语音遥控器体验Hi大家好,我是三重奏有句俗话说的好,懒惰是科技进步的推动力,很多东西正因为人们懒于自己动手,才被发明出来。这句话虽然调侃的意思居多,但不难发现这些年兴起的智能家电产品,正在一步步刷牙美肤两不误,罗曼智能小果刷T10X体验Hi大家好,我是三重奏如果要说有什么产品,用了之后就回不去了,那么电动牙刷肯定在其列。电动牙刷牙刷作为现代科技发展的产物,就和电动剃须刀一样,凭借其高效方便的清洁方式,被越来越多的10。12晚间ETH走势抱怨不能解决问题,抗单不能改变方向,而频繁交易只会错失利润增加失误的机率,重仓更是赌博的开始。方向错了,抗是扛不住的,刚刚以太来了一波大拉升,我们从四小时图来看,macd空头能量柱不和中俄做生意?捷克迫于压力,将中俄排除出该国核电站建设项目中国与俄罗斯等国坚定地反对霸权,但此举显然让美国难以接受!近些年来,美国对中俄的围堵手段也越来越粗暴极端。如今美国不但自己打着维护国家安全的旗号肆意排挤中国和俄罗斯的企业在美国的业美军最神秘的研发部门,为何值得我们学习!臭鼬工厂,美军心头肉众所周知,F35战斗机作为上个世纪末全球最大的军事采购项目,其承包商洛克希德马丁公司可谓是大赚特赚。虽然从现阶段F35的具体性能来看,F35项目可谓是完全失败。但是从整个项目的意义