python面向对象基础知识笔记.doc
《python面向对象基础知识笔记.doc》由会员分享,可在线阅读,更多相关《python面向对象基础知识笔记.doc(37页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、面向对象与面向过程 面向过程:根据业务逻辑从上到下写代码。 面向对象:将变量与函数绑定到一起,分类进行封装,每个程序只要负责分配给自己的分类,这样能够更快速的开发程序,减少了重复代码。面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程的思路是将数据与函数按照执行的逻辑顺序组织在一起,数据与函数分开考虑,面向过程基本是由函数组成的。01.面向过程编程面向过程编程的关注点在于怎么做 把完成某一个需求的 所有步骤 从头到尾 逐步实现 根据开发需求,将某些 功能独立 的代码 封装 成一个又一个 函数 最后完成的代码,就是顺序地调用 不同的函数特点: 注重步骤与过程,不注重职责分工
2、 如果需求复杂,代码会变得很复杂 开发复杂项目,没有固定的套路,开发难度很大!02. 面向对象基本概念面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)和面相过程编程,是两种不同的编程方式。面向对象编程的关注点在于谁来做相比较函数,面向对象是更大的封装,根据职责在 一个对象中封装多个方法 在完成某一个需求前,首先确定职责 要做的事情(方法) 根据 职责 确定不同的 对象,在对象内部封装不同的方法(多个) 最后完成的代码,就是顺序地调用不同对象的相应方法。特点: 注重 对象和职责,不同的对象承担不同的职责。 更加适合应对复杂的需求变化,是专门应对复杂
3、项目开发,提供的固定套路。 需要在面向过程基础上,再学习一些面向对象的语法。类和对象类和对象是面向对象编程的两个核心概念。类类是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用 特征其实就是一个变量,在类里我们称之为属性。 行为其实就是一个函数,在类里我们称之为方法。 类其实就是由属性和方法组成的一个抽象概念。类就相当于制造飞机时的图纸,是一个模板。这个模板只规定了飞机的某些特征(例如大小,颜色,型号等等)和行为(例如起飞,降落,飞行等等),它并不是一个具体的飞机,而是对飞机的一个抽象概念。它出现的目的,是为了让我们的创建飞机对象。对象对象是由类创建出来的一个具体存在,可以直
4、接使用。由哪一个类创建出来的 对象,就拥有在哪一个类中定义的属性和方法。对象就相当于用图纸制造的飞机。在开发中,应该先有类,在类里定义好属性和行为,再根据类来创建对象。类和对象的关系 类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象。 使用同一个类,能够创建出很多对象。 类中定义了什么属性和方法,对象中就有什么属性和方法。 不同对象对应的属性值也会不同。例如:定义了一个狗类,这个狗类有以下属性: 品种 颜色 性别 名字现在根据这个类创建出了两条狗,这两条狗分别是哈士奇、灰色、母、二哈和中华田园犬、黄色、公、旺财。我们发现,这两条狗都具有 品种、颜色、性别和名字这些属性,但是每条狗
5、对应的属性值却不一样。类的设计在使用面相对象开发前,应该首先分析需求,确定一下,程序中需要包含哪些类!在程序开发中,要设计一个类,通常需要满足一下三个要素:1. 类名这类事物的名字,安照大驼峰命名法(每个单词的首字母大写)起名。2. 属性这类事物具有什么样的特征。3. 方法这类事物具有什么样的行为。定义类名名词提炼法:分析整个业务流程,出现的名词,通常就是找到的类。属性和方法的确定 对对象的特征描述,可以定义成属性 对象具有的行为(动词)可以定义成方法面向对象基本语法在Python中,对象几乎是无处不在的,我们可以使用dir内置函数来查看这个对象里的方法。定义简单的类(只包含方法)面向对象是更
6、大的封装,在一个类中封装多个方法,这样通过这个类创建出来的对象,就可以直接调用这些方法了!定义类在Python中要定义一个只包含方法的类,语法格式如下:class 类名: def 方法1(self,参数列表): pass def 方法2(self,参数列表): pass1. 方法的定义格式和之前学习过的函数一样2. 方法里的第一个参数必须是self,大家暂时先记住,稍后介绍 self.3. 类名要遵守大驼峰命名法。创建实例对象当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:对象变量名 = 类名()第一个面向对象代码需求 小猫 爱 吃 鱼,小猫 要 喝 水分析 定义一个猫类 Cat
7、定义两个方法 eat 和 drink 按照需求 不需要定义属性class Cat: 这是个猫类 def eat(self): print(小猫在吃东西) def drink(self): print(小猫在喝水)tom = Cat() # 创建了一个Cat对象tom.eat()tom.drink()hello_kitty = Cat() # 又创建了一个新的Cat对象hello_kitty.eat()hello_kitty.drink()思考:tom和hello_kitty是同一个对象吗?self的使用给对象添加属性python支持动态属性,当一个对象创建好了以后,直接使用对象.属性名 = 属
8、性值就可以很方便的给对象添加一个属性。tom = Cat()tom.name = Tom # 可以直接给 tom 对象添加一个 name 属性这种方法很方便,但是,不建议使用这种方式给对象添加属性。self的概念哪个对象调用了方法,方法里的self指的就是谁。 通过self.属性名可以访问到这个对象的属性;通过self.方法名()可以调用这个对象的方法。class Cat: def eat(self): print(%s爱吃鱼 %self.name)tom = Cat()tom.name = Tom # 给 tom 对象添加了一个name属性tom.eat() # Tom爱吃鱼lazy_cat
9、 = Cat()lazy_cat.name = 大懒猫lazy_cat.eat() # 大懒猫爱吃鱼直接给对象添加属性的缺点上述代码中,我们是先创建对象,然后再给对象添加name属性,但是这样做会有问题。tom = Cat()tom.eat()tom.anme = Tom程序运行时会报错:AttributeError: Cat object has no attribute name错误提示:Cat对象没有 name 属性在日常开发中,不推荐在类的外部直接给对象添加属性这种方式。对象应该具有哪些属性,我们应该封装在类的内部。魔法方法Python 里有一种方法,叫做魔法方法。Python 的类里
10、提供的,两个下划线开始,两个下划线结束的方法,就是魔法方法,魔法方法在恰当的时候就会被激活,自动执行。 魔法方法的两个特点: 两侧各有两个下划线; 咒语名字已经由 Python 官方定义好,我们不能乱写。1._init_方法_init_()方法,在创建一个对象时默认被调用,不需要手动调用。在开发中,如果希望在创建对象的同时,就设置对象的属性,可以对_init_方法进行改造。class Cat: 这是一个猫类 def _init_(self,name): # 重写了 _init_ 魔法方法 self.name = name def eat(self): return %s爱吃鱼%self.nam
11、e def drink(self): return %s爱喝水%self.name tom = Cat() TypeError: _init_() missing 1 required positional argument: name 这种写法在运行时会直接报错!因为 _init_ 方法里要求在创建对象时,必须要传递 name 属性,如果不传入会直接报错! tom = Cat(Tom) # 创建对象时,必须要指定name属性的值tom.eat() # tom爱吃鱼注意:1. _init_()方法在创建对象时,会默认被调用,不需要手动的调用这个方法。2. _init_()方法里的self参数,
12、在创建对象时不需要传递参数,python解释器会把创建好的对象引用直接赋值给self3. 在类的内部,可以使用self来使用属性和调用方法;在类的外部,需要使用对象名来使用属性和调用方法。4. 如果有多个对象,每个对象的属性是各自保存的,都有各自独立的地址。5. 方法是所有对象共享的,只占用一份内存空间,方法被调用时会通过self来判断是哪个对象调用了实例方法。2._del_方法创建对象后,python解释器默认调用_init_()方法;而当删除对象时,python解释器也会默认调用一个方法,这个方法为_del_()方法。class Student: def _init_(self,name,
13、score): print(_init_方法被调用了) self.name = name self.score = score def _del_(self): print(_del_方法被调用了)s = Student(lisi,95)del sinput(请输入内容)3._str_方法_str_方法返回对象的描述信息,使用print()函数打印对象时,其实调用的就是这个对象的_str_方法。class Cat: def _init_(self,name,color): self.name = name self.color = colortom = Cat(Tom,white)# 使用 p
14、rint 方法打印对象时,会调用对象的 _str_ 方法,默认会打印类名和对象的地址名print(tom) # 如果想要修改对象的输出的结果,可以重写_str_方法。class Person: def _init_(self,name,age): self.name = name self.age = age def _str_(self): return 哈哈p = Person(张三,18)print(p) # 哈哈 打印对象时,会自动调用对象的 _str_ 方法一般情况下,我们在打印一个对象时,可能需要列出这个对象的所有属性。class Student: def _init_(self,
15、name,score): self.name = name self.score = score def _str_(self): return 姓名是:,成绩是分.format(self.name,self.score)s = Student(lisi,95)print(s) # 姓名是:lisi,成绩是95分4. _repr_方法_repr_方法和_str_方法功能类似,都是用来修改一个对象的默认打印内容。在打印一个对象时,如果没有重写_str_方法,它会自动来查找_repr_方法。如果这两个方法都没有,会直接打印这个对象的内存地址。class Student: def _init_(se
16、lf, name, score): self.name = name self.score = score def _repr_(self): return hellloclass Person: def _repr_(self): return hi def _str_(self): return goods = Student(lisi, 95)print(s) # hellop = Person()print(p) # good5. _call_方法对象后面加括号,触发执行。class Foo: def _init_(self): pass def _call_(self, *args,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- python 面向 对象 基础知识 笔记
限制150内