版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
内容导读面向对象编程是一种基于“对象”概念的编程范式,它主要针对大型软件设计而提出,目的是使软件设计更加灵活,能够很好地支持代码复用和设计复用,并且使代码具有更好的可读性和可扩展性。Python完全采用了面向对象的思想,是真正面向对象的编程语言,完全支持面向对象的基本功能。目录Contents7.1面向对象编程思想7.2Python中的类和对象7.3类成员与实例成员7.4私有成员和@property装饰器7.5继承7.6多态7.7拓展练习7.1.1面向对象和面向过程的区别面向过程编程更加关注的是“程序的逻辑流程”,是一种“执行者”思维,适合编写小规模的程序。面向过程思想思考问题时,我们首先思考“怎么按步骤实现”?并将步骤对应成方法,一步一步最终完成。这个适合简单任务,不需要过多协作的情况下。面向对象更加关注的是“软件中对象之间的关系”,是一种“设计者”思维,适合编写大规模的程序。面向对象(Object)思想更契合人的思维模式。我们首先思考的是“怎么设计这个事物?”比如思考造车,我们就会先思考“车怎么设计?”,而不是“怎么按步骤造车的问题”。这就是思维方式的转变。7.1.2面向对象思想基本概念面向对象编程思想是一种以对象为中心的编程方式。它更加强调运用人类在日常的思维逻辑中经常采用的思想方法与原则,如抽象、分类、封装、继承和多态等。接下来对这些特征以及涉及到的基本概念进行简单介绍。1.类类实际上是对现实世界中某种对象的抽象表示,它描述了该对象的属性和行为。类可以看成是一类对象的模板,对象可以看成该类的一个具体实例。7.1.2面向对象思想基本概念2.对象对象(Object)是客观世界存在的具体实体,具有明确定义的状态和行为。对象可以是有形的如:一本书、一辆车等。也可以是无形的规则、计划或事件。对象的来源是模拟真实世界,通常具有以下特征:状态行为标识7.1.2面向对象思想基本概念3.封装之前其实已经接触过封装的思想,比如把不同类型数据加入列表里边,这是一种封装,是数据层面的封装;把常用代码段打包成一个函数,这也是一种封装,是语句层面的封装;这里所讲的封装,更加先进一些,是对数据和代码的封装,把它们结合在一起,构成一个独立的封装体,也就是对象。4.继承继承是为代码复用和设计复用而设计的,是面向对象编程的重要特征之一。继承使得一个类可以继承另一个类的属性和方法,这样通过抽象出共同的属性和方法组建新的类,便于代码的重用。7.1.2面向对象思想基本概念5.多态多态(Polymorphism)是面向对象编程的四大特性之一,它允许我们使用父类类型的引用指向子类对象,并在运行时根据对象的实际类型调用其相应的方法。这种特性使得代码更加灵活和可重用。6.抽象人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。抽象就是抽出事物的本质特征而暂不考虑它们的细节。目录Contents7.1面向对象编程思想7.2Python中的类和对象关注微信公众号DSSF007,回复关键字“清华电脑学堂”获取更多资源7.3类成员与实例成员7.4私有成员和@property装饰器7.5继承7.6多态7.7拓展练习7.2.1类的定义Python使用class关键字定义类,class关键字后是一个空格,然后是类名,接着是一个冒号,最后换行进行类的内部实现。具体语法格式如下:class类名:属性定义def方法1(self,参数列表): passdef方法2(self,参数列表): pass7.2.1类的定义【例7-1】定义一个猫类功能描述:定义一个名为Cat的类。classCat:"""这是一个猫类"""defeat(self):print("小猫爱吃鱼")defdrink(self):print("小猫在喝水")7.2.2创建对象定义类后,就可以根据类来创建对象,并且通过“对象名.成员”的方式来访问其中的数据成员和成员方法。语法格式如下:对象变量=类名()例如,创建一个猫对象,并调用其中的方法,代码如下:tim=Cat()#实例化一个Cat对象tim.drink()tim.eat()7.2.3self参数Python规定self必须是方法的第一个形参(如果有多个形参),self代表的是类的实例。那么如何使用self呢?1.给对象增加属性在Python中,要给对象设置属性非常容易,只需要在类的外部代码中通过“对象名.属性名”设置即可。但是实际当中不推荐这样做,因为对象属性应该封装在类的内部才更加合理。2.使用self访问对象的属性由哪一个对象调用的方法,方法内的self表示的就是哪一个对象的引用。在类封装的方法内部,self就表示当前调用方法的对象自身,调用方法时,不需要传递参数给self。在方法内部,可以通过self访问对象的属性,也可以通过“self.”的形式调用其它的对象方法。7.2.3self参数【例7-2】使用self访问属性功能描述:对Cat类进行改造,使用self访问属性。7.2.4初始化方法将上面案例的代码调整一下,先调用对象的方法,再进行属性的设置,如下所示。tim=Cat()tim.eat()='Tim'print(tim)执行程序,会出现如下错误信息:AttributeError:'Cat'objecthasnoattribute'name'7.2.4初始化方法当使用类名()创建对象时,会自动执行以下操作:(1)为对象在内存中分配空间——创建对象(2)为对象的属性设置初值——调用初始化方法【例7-3】在Cat类中增加__init__方法功能描述:在Cat类中增加__init__方法,创建实例时会自动调用。classCat:"""这是一个猫类"""def__init__(self):print("初始化方法")tom=Cat()7.2.4初始化方法【例7-4】在__init__方法中设置属性并初始化功能描述:在__init__方法中设置属性并初始化。classCat:"""这是一个猫类"""def__init__(self):print("这是一个初始化方法")#定义用Cat类创建的猫对象都有一个name的属性
="Tim"defeat(self):print("%s爱吃鱼"%)#使用类名()创建对象的时候,会自动调用初始化方法__init__tim=Cat()tim.eat()7.2.4初始化方法【例7-5】属性作为__init__的参数功能描述:将属性作为__init__的参数,以确保不同的对象拥有不同的属性值。目录Contents7.1面向对象编程思想7.2Python中的类和对象关注微信公众号DSSF007,回复关键字“清华电脑学堂”获取更多资源7.3类成员与实例成员7.4私有成员和@property装饰器7.5继承7.6多态7.7拓展练习7.3.1类属性和实例属性类属性就是在类中定义的属性,通常用来记录与这个类相关的特征,不会记录具体对象的特征,一般通过“类名.”访问;而实例属性一般是在构造方法__init__()中定义的,定义和使用时必须以self作为前缀。【例7-6】类属性的使用功能描述:定义一个水果类,每个水果都有自己的名字,现在需要知道用这个水果类7.3.1类属性和实例属性【例7-7】动态增加类成员和实例成员功能描述:对【例7-6】中的Fruit进行改造,增加类属性和实例方法。7.3.2类方法、实例方法和静态方法1.类方法类方法就是针对类对象定义的方法,在类方法内部可以直接访问类属性或者调用其他的类方法,语法格式如下。@classmethoddef类方法名(cls):Pass类方法需要用修饰器@classmethod来标识,告诉解释器这是一个类方法。一般讲cls作为类方法的第一个参数名称,这个参数和实例方法的第一个参数self类似,由哪一个类调用的方法,方法内的cls就是哪一个类的引用。7.3.2类方法、实例方法和静态方法【例7-8】类方法应用功能描述:定义一个水果类,每个水果都有自己的name,现在要求在类中封装一个show_tool_count方法,输出使用该类创建的对象个数。7.3.2类方法、实例方法和静态方法2.实例方法实例方法是从属于实例对象的方法。实例方法的定义格式如下:def方法名(self[,形参列表]):函数体方法的调用格式如下:对象.方法名([实参列表])在定义和使用实例方法时,需要注意以下两点:(1)定义实例方法时,第一个参数必须为self。和前面一样,self指当前的实例对象。(2)调用实例方法时,不需要也不能给self传参。self由解释器自动传参。7.3.2类方法、实例方法和静态方法【例7-9】实例方法应用功能描述:定义一个Student类,在里面定义一个实例方法show_score()用来输出学生的成绩。7.3.2类方法、实例方法和静态方法3.静态方法Python中允许定义与“类对象”无关的方法,称为“静态方法”。“静态方法”和在模块中定义普通函数没有区别,只不过“静态方法”放到了“类的名字空间里面”,需要通过“类调用”。静态方法通过装饰器@staticmethod来定义,格式如下:@staticmethoddef静态方法名([形参列表]):函数体7.3.2类方法、实例方法和静态方法【例7-10】实例方法、类方法和静态方法综合应用功能描述:设计一个Game类,属性包括:一个类属性top_score记录游戏的历史最高分,一个实例属性player_name记录当前游戏的玩家姓名。方法包括:静态方法show_help()显示游戏帮助信息,类方法show_top_score()显示历史最高分,实例方法start_game()开始当前玩家的游戏。目录Contents7.1面向对象编程思想7.2Python中的类和对象关注微信公众号DSSF007,回复关键字“清华电脑学堂”获取更多资源7.3类成员与实例成员7.4私有成员和@property装饰器7.5继承7.6多态7.7拓展练习7.4.1私有成员Python对于类的成员没有严格的访问控制限制,这与其他面向对象语言有区别。关于私有属性和私有方法,有如下要点:(1)通常约定,两个下划线开头的属性和方法是私有的(private),其他为公共的(public);(2)类内部可以访问私有属性/方法;(3)类外部不能直接访问私有属性/方法;(4)类外部可以通过“_类名__私有属性/方法名”访问私有属性/方法。7.4.1私有成员【例7-11】在类中定义私有成员功能描述:在类中定义私有成员,使外部不能直接访问。classMen:def__init__(self,name):=nameself.__age=18def__secret(self):#在对象的方法内部,是可以访问对象的私有属性的
print("%s的年龄是%d"%(,self.__age))LN=Men("林南")#私有属性,在外界不能够被直接访问print(LN.__age)#私有方法,同样不允许在外界直接访问LN.__secret()7.4.1私有成员运行程序,错误信息如下:AttributeError:'Men'objecthasnoattribute'__age'7.4.1私有成员【例7-12】通过特殊方式访问私有成员功能描述:通过_类名__私有成员名的方式访问私有成员。7.4.2@property装饰器@property装饰器可以将方法转换为属性。其主要作用是允许通过访问属性的方式来调用一个方法,而不需要在调用时再加括号。这样做的好处是代码更加简洁、直观,并且可以更好地控制对属性的访问和修改。【例7-13】@property装饰器的用法功能描述:定义一个Person类,对其中的方法使用装饰器,调用方法时按照使用属性的方式进行。目录Contents7.1面向对象编程思想7.2Python中的类和对象关注微信公众号DSSF007,回复关键字“清华电脑学堂”获取更多资源7.3类成员与实例成员7.4私有成员和@property装饰器7.5继承7.6多态7.7拓展练习7.5.1单一继承单一继承即子类只能有一个父类,但父类可以拥有多个子类,单一继承的语法结构如下:class父类名:#父类的属性和方法class子类名(父类名):#继承自父类
#子类特有的属性和方法
#可重写(Override)父类方法7.5.1单一继承如果在类定义中没有指定父类,则默认父类是object类。也就是说,object是所有类的父类,里面定义了一些所有类共有的默认实现,比如:__new__()。定义子类时,如果需要调用父类构造方法,则必须在其构造函数中调用父类的构造函数。调用格式如下:父类名.__init__(self,参数列表)7.5.1单一继承1.方法重写当父类的方法实现不能满足子类需求时,子类可以对父类的方法进行修改,在子类中重新定义和父类同名的方法,这就是方法重写。重写父类方法有两种情况:(1)覆盖父类方法如果父类的方法实现和子类的方法实现完全不同,就可以使用覆盖的方式,在子类中重新编写父类的方法实现。(2)对父类进行扩展如果子类的方法实现中包含父类的方法实现,就可以使用该方式。即在子类中重写父类方法,在需要父类方法提供的功能的地方使用super().父类方法来调用父类方法的执行,代码其他位置针对子类的需求,编写子类特有的代码实现。7.5.1单一继承2.父类的私有属性和私有方法子类对象不能在自己的方法内部直接访问父类的私有属性或私有方法,但可以通过父类的公有方法间接访问父类的私有属性或私有方法。【例7-14】子类访问父类的私有成员功能描述:A和B两个类的关系如图7-13所示。B的对象不能直接访问__num2属性,也不能在demo方法内访问__num2属性。B的对象可以在demo方法内调用父类的test方法,父类的test方法内部,能够访问__num2属性和__test方法。7.5.2多重继承Python支持多继承,即子类可以拥有多个父类,并且具有所有父类的属性和方法。多重继承的语法格式如下:class子类名(父类名1,父类名2...)pass7.5.2多重继承多重继承示例的代码如下:classA:deftest(self):print("test方法")classB:defdemo(self):print("demo方法")classC(A,B):"""多继承可以让子类对象,同时具有多个父类的属性和方法"""pass#创建子类对象c=C()c.test()c.demo()7.5.2多重继承执行程序,结果如下:test方法demo方法目录Contents7.1面向对象编程思想7.2Python中的类和对象关注微信公众号DSSF007,回复关键字“清华电脑学堂”获取更多资源7.3类成员与实例成员7.4私有成员和@property装饰器7.5继承7.6多态7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026氢燃料电池行业深度观察及技术突破与应用领域研究
- 2026中国药品机械制造行业市场现状供需分析及投资评估规划分析研究报告
- 保险行业自动化流程重构
- 数据隐私保护-第5篇
- 护士解剖学测试试题及答案
- 2026中国物流运输行业市场分析供需现状及投资评估展望规划报告
- 信用卡风险预测算力融合
- 2026汽车电池回收利用行业市场前景深度剖析及投资趋势分析报告
- 2026生物制药研发领域技术突破分析及投资布局策略研究报告
- 智能反欺诈系统-第9篇
- 2026年东营黄河三角洲军马场实业投资集团有限公司招聘(15名)考试备考题库及答案详解
- RF 32001-2025 人民防空防护设备(防护门类)通 用技术标准
- 巡防员考勤管理办法
- 人员职业健康管理办法
- 基础教育集团化办学运行优化:关键关系的解析与处理
- 解除合同协议书条款
- 工业企业节水试题及答案
- 2024宠物营养师考试复习资料试题及答案
- 中级维保全部抽考题
- 广东省工程勘察设计服务成本取费导则(2024版)
- 光伏发电监理表式(NB32042版-2018)
评论
0/150
提交评论