Python面向对象编程
面向对象(OOP)基本概念
1) 面向对象 —— 谁来做?
相比较函数,面向对象 是 更大 的 封装,根据 职责 在 一个对象中 封装 多个方法
- 在完成某一个需求前,首先确定 职责 —— 要做的事情(方法)
- 根据 职责 确定不同的 对象,在 对象 内部封装不同的 方法(多个)
- 最后完成的代码,就是顺序地让 不同的对象 调用 不同的方法
特点
- 注重 对象和职责,不同的对象承担不同的职责
- 更加适合应对复杂的需求变化,是专门应对复杂项目开发,提供的固定套路
- 需要在面向过程基础上,再学习一些面向对象的语法
可以看一下植物大战僵尸一个列子:
我们只是关心一个一个对象,什么事情让专门的对象去完成就可以了。
类和对象
1.1 类
- 类 是对一群具有 相同 特征 或者 行为 的事物的一个统称,是抽象的,不能直接使用
- 特征 被称为 属性
- 行为 被称为 方法
- 类 就相当于制造飞机时的图纸,是一个 模板,是 负责创建对象的
1.2 对象
- 对象 是 由类创建出来的一个具体存在,可以直接使用
- 由 哪一个类 创建出来的 对象,就拥有在 哪一个类 中定义的:
- 属性
- 方法
- 对象 就相当于用 图纸 制造 的飞机
在程序开发中,应该 先有类,再有对象
- 类是模板,对象 是根据 类 这个模板创建出来的,应该 先有类,再有对象
- 类 只有一个,而 对象 可以有很多个
- 不同的对象 之间 属性 可能会各不相同
- 类 中定义了什么 属性和方法,对象 中就有什么属性和方法,不可能多,也不可能少
面相对象基础语法
- 在
Python
中要定义一个类,语法格式如下:
class 类名:
def 方法1(self, 参数列表):
pass
def 方法2(self, 参数列表):
pass
- 当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:
对象变量 = 类名()
我们来写一个类
需求
- 小猫 爱 吃 鱼,小猫 要 喝 水
分析
- 定义一个猫类 Cat
- 定义两个方法 eat 和 drink
- 按照需求 —— 不需要定义属性
class Cat:
"""这是一个猫类"""
def eat(self):
print("小猫爱吃鱼")
def drink(self):
print("小猫要喝水")
# 创建猫对象
tom = Cat()
# 调用对象的方法
tom.eat()
tom.drink()
封装 继承 多态
面向对象三大特性 1. 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 * 定义类的准则 2. 继承 实现代码的重用,相同的代码不需要重复的编写 * 设计类的技巧 * 子类针对自己特有的需求,编写特定的代码 3. 多态 不同的 子类对象 调用相同的 父类方法,产生不同的执行结果 * 多态 可以 增加代码的灵活度 * 以 继承 和 重写父类方法 为前提 * 是调用方法的技巧,不会影响到类的内部设计
我们用一个列子来快速熟悉一下: 需求
- 在 Dog 类中封装方法 game
- 普通狗只是简单的玩耍
- 定义 XiaoTianDog 继承自 Dog,并且重写 game 方法
- 哮天犬需要在天上玩耍
- 定义 Person 类,并且封装一个 和狗玩 的方法
- 在方法内部,直接让 狗对象 调用 game 方法
class Dog(object):
def __init__(self, name):
self.name = name
def game(self):
print("%s 蹦蹦跳跳的玩耍..." % self.name)
class XiaoTianDog(Dog):
def game(self):
print("%s 飞到天上去玩耍..." % self.name)
class Person(object):
def __init__(self, name):
self.name = name
def game_with_dog(self, dog):
print("%s 和 %s 快乐的玩耍..." % (self.name, dog.name))
# 让狗玩耍
dog.game()
# 1. 创建一个狗对象
# wangcai = Dog("旺财")
wangcai = XiaoTianDog("飞天旺财")
# 2. 创建一个小明对象
xiaoming = Person("小明")
# 3. 让小明调用和狗玩的方法
xiaoming.game_with_dog(wangcai)
理解一下: 1. Dog类对狗这个类进行一下封装 2. XiaoTianDog(Dog)对Dog类继承 3. Person类中调用game_with_dog(self, dog)-->dog.game()就是父类引用指向字类对象。多态啦
帮忙点赞啦,感谢感谢
本文由
xujun20200616
原创发布于
阳光沙滩
,未经作者授权,禁止转载