前言
对应GitHub代码地址:https://github.com/fengfanli/studyPython
对应的包是: study05_OOP上
一、面向对象编程:
1. oop [object oriented programming] 是一种python的编程思路
面向过程:就是我们一开始学习的,按照解决问题的步骤去写代码 【根据业务逻辑去写代码】
在思考问题的时候, 首先分析’怎么按照步骤去实现’ 然后将问题解决拆解成若干个步骤,并将这些步骤对应成方法一步一步的 最终完成功能
面向对象:关注的是设计思维【找洗车店 给钱洗车】
2. 解释
出差–北京
小明-- 什么时间 - -买什么票【高铁 汽车 飞机】—酒店—回程时间
亲力亲为的去做 【面向过程】
面向过程不足:小明没有更多的精力去考虑别的事情
boss— 秘书【小明需要考虑的事情】----财务----目的:北京 【面向对象】
boss有更多的精力去处理其他的时候,创造更多的价值
从计算机的角度来看:面向过程不适合做大项目
而面向对象合适做更大项目的设计
3. 面向对象 和面向对象编程
面向对象
:按人们认识客观世界的系统思维方式,采用基于对象(实体) 的概念建立模型,模拟客观世界分析、设 计、实现软件的办法。
面向对象编程
(Object Oriented Programming-OOP)是一种解决软件复用的设计和编程方法。这种方法把软件系统中相近相似的操作逻辑和操作 应用数据、状态,以类的形式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。
二、类和对象
1. 类:
类是具有一组 相同或者相似 特征【属性】和行为【方法】的 一系列[多个]对象组合
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
类的组成部分
类(Class)由3个部分构成
类的名称: 类名
类的属性: 一组数据
类的方法: 允许对进行操作的方法 (行为)
现实世界 计算机世界
行为---------> 方法
特征---------->属性
2. 对象:
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数
对象是实实在在的一个东西,类的实例化,具象化
3. 对象和类
类是对象的抽象化 而对象是类的一个实例
4. 实例方法
实例方法
:在类的内部,使用def 关键字来定义 第一个参数默认是 self【名字标识可以是其他的名字,但是这个位置必须被占用】
实例方法是归于 类的实例所有
5. 属性
属性
:包括 类属性
实例属性
两种。
属性 是 类里面定义的变量
在类的内部定义的变量【类属性
】
在方法内部定义的【通过类似于self.变量名】 变量,是 实例属性`
三、self
1. self
self和对象指向同一个内存地址,可以认为 self 就是对象的引用。, java 中有this, python 有self;
不同的是:python 类中方法 的第一个参数 为self, java 中类的方法不需要传 this参数。
2. self 特点
- self 只有在类中定义 实例方法的时候才有意义, 在调用时候不必传入相应的参数 而是由解释器 自动去指向
- self 的名字是可以更改的 可以定义成其他的名字,只是约定俗成的定义成了 self
- self 指的是 类实例对象本身, 相当于java中 this
四、 魔方方法
在python中,有一些内置好的特定的方法,方法名是“xxx”,在进行特定的操作时会自动被调用,这些方法称之为魔法方法。
1. 几种常见的魔法方法。
- _ init_() 方法:
初始化一个类,在创建实例对象为其赋值时使用
。 - _ str_() 方法:在将对象转换成字符串 str(对象) 测试的时候,打印对象的信息。直接打印对象,输出结果只一串类似id地址的信息,从写这个方法,打印对象时,就默认调用这个方法
- _ new_() 方法:
创建并返回一个实例对象,调用了一次,就会得到一个对象
。 - _ class_() 方法:获得已知对象的类 ( 对象.class)。
- _ del_() 方法:
对象在程序运行结束后进行对象销毁的时候调用这个方法,来释放资源
。 - _ call_() 方法: 在 直接调用 对象() 这个方法时,会调用这个方法。
……
2. __init___函数
总结 init 方法
- python 自带的内置函数 具有特殊的函数 使用双下划线 包起来的【魔术方法】
- 是一个初始化的方法 用来定义实例属性 和初始化数据的,在创建对象的时候自动调用 不用手动去调用
- 利用传参的机制可以让我们定义功能更加强大并且方便的 类
五、知识点总结
1. 类和对象的概念
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能;
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数。
2. 定义类和对象
使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾;
实例化类其他编程语言中一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。
3. 实例方法与属性
在类的内部,使用 def 关键字可以定义一个实例方法;
定义在类里面,方法外面的属性称之为类属性,定义在方法里面使用self引用的属性称之为实例属性。
4. __init__方法
构造初始化函数,在创建实例对象为其赋值时使用。
5. 理解self
self和对象指向同一个内存地址,self就是对象的引用。
6. 魔法方法
在python中,有一些内置好的特定的方法;
方法名是“xxx”;
在进行特定的操作时会自动被调用。
六、课后问答题
1、什么是类,什么是对象
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能。 对象则是根据模板创建的实例,通过实例对象可以执行类中的函数
2、python中定义一个类的语法格式是什么
3、类(class)由哪三个部分构成
类三要素:类名、属性、方法
4、init方法有什么作用,如何定义
是一个初始化的方法 用来定义实例属性 和初始化数据的,在创建对象的时候自动调用 不用手动去调用
init(self)
5、方法中的"self"代表什么。
对象的引用
6、在类中定义init方法的时候第一个形参必须是self吗?self可以用其他东西代替吗?
不必须,可以使用其他名称代替,前提必须符合命名规则
7、Python面向对象中的魔法方法,是如何定义的,魔法方法需要开发人员去调用吗?
python内置的函数,类似于__str__(self),不需要调用,python自动调用
8、str方法可以没有返回值,这句话是否正确?
有返回值,不正确
9、查看下面代码,请写出有那些是属性,那些是实例方法。
class Person(object):
foot = 2
eye = 2
mouth = 1
def __init__(self,name,age):
self.name = name
self.age = age
print("self=%s" % id(self))
def run(self):
print('飞快跑')
def eat(self):
print('吃饭')
xiaoming = Person('小明', 18)
print("xiaoming=%s" % id(xiaoming))