Python 简明教程 --- 18,Python 面向对象
微信公众号:码农充电站pro
代码能借用就借用。
—— Tom Duff
目录
编程可分为面向过程编程
和面向对象编程
,它们是两种不同的编程方式,当然背后的思维方式也是不同的。面向过程编程是一种传统的编程方式,面向对象编程是一个更高级的编程方式。
1,面向过程编程
面向过程编程(POP
)的重点在于过程
二字。
面向过程比较好理解,就是按照人们通常的思维方式,在做一件事情的时候,将这件事情划分为多个步骤,一步一步来做。
面向过程编程,就是在进行一个项目时,将这个项目分为多个小的步骤,一个步骤就是一个过程,将这些过程全部组织起来,就形成了完整的项目。
C 语言是典型的面向过程编程语言
比如,我们可以将我要去北京
这件事情分为以下四个步骤:
- 去高铁站
- 购买高铁票
- 持票上高铁
- 坐高铁到北京
这里的每个步骤相当于一个过程,我们将这些过程
封装成函数
,然后,从前到后将这些函数
组织起来,就完成了我要去北京
这件事情。
我们将这个过程用简单的代码实现如下,将该代码保存在to_beijing.py
文件中:
#! /usr/bin/env python3
def to_high_station():
print('我到了高铁站')
def buy_rail_tickets():
print('我买了高铁票')
def geton_high_rail():
print('我坐上了高铁')
def to_beijing():
print('我到了北京')
if __name__ == '__main__':
to_high_station()
buy_rail_tickets()
geton_high_rail()
to_beijing()
在控制台执行命令,如下:
$ python3 to_beijing.py
我到了高铁站
我买了高铁票
我坐上了高铁
我到了北京
2,面向对象编程
面向对象思想
面向对象编程(OOP
)的重点在与对象
二字,主要的编程思想是围绕对象
展开。
在思考一个项目的时候,将项目中的重要点/关键点
都设计成一个个的类
,每个类承担着不同的工作,不同的功能被归纳到不同的类中。然后,由类产生出对象,这些对象之间的相互作用,最终组成了一个完整的项目。
类与对象
面向对象编程中的两个非常重要概念是类
与对象
,类
也是代码复用的一种机制。
前面我们讲到过,
函数
和模块
都是代码复用的机制。
类
代表一类有着相同特征
事物,是一个抽象的概念。由同一个类产生的对象,有着相同的特性。比如人类
都会行走,会使用工具,需要呼吸和喝水,这都是人类的共性。
对象
由类
产生,是一个类的实例
,创建对象的过程,叫做类的实例化
。对象是具体的,而不是抽象的。同一类的不同对象,也有不同的属性。比如人类
,有不同的性别,姓名和年龄等,这都是人类的不同属性。
设计模式
是对面向对象编程
的宝贵经验的归纳总结,让我们可以更方便的运用面向对象
的思想来进行编程工作。
面向对象语言
Java 语言是完全的面向对象
编程语言,因为所有的步骤都在类
中进行。
C++ 语言是半面向对象
编程语言,它被称为带类的 C
,即支持面向过程编程,又支持面向对象编程。
Python 语言是一门脚本语言
,以简单优雅
为设计理念,即可以面向过程编程,也可以面向对象编程,但不像C++ 语言那样有太多的复杂枯燥的概念,Python 语言更注重实用性。
面向对象三大特征
封装
,继承
和多态
是面向对象的三大特征,这三种特征都是面向对象
编程语言自身提供的机制,可以让我们更方便的进行面向对象程序设计:
- 封装:让用户可以访问需要的方法,禁止访问不必要的方法,屏蔽了类内部的复杂性。
- 继承:使得子类可以继承父类的代码,也是一种代码复用手段,增强了类与类之间的逻辑结果关系。同时,
继承
也是多态
的必要条件。 - 多态:一个事物(对象)可以表现多种
形态
,多态是面向对象编程中,一个非常强大的特性。
面向对象编程
我们仍然以我要去北京
这件事来说明,用面向对象编程
是如何实现的。
面向对象编程的重点在于类的设计
,如何将一个大的项目,拆分为不同的,必要的类。类的功能是单一的,而不是将不同的功能糅杂到一个类中。
首先,我们需要设计出一个类
,比如类名
叫作SomeOne
,这个类
至少需要有四项功能:
- 去高铁站
- 购买高铁票
- 持票上高铁
- 坐高铁到北京
我们需要将这四项功能,写成四个方法
,放在类SomeOne
中,代码如下:
#! /usr/bin/env python3
# 定义一个类
class SomeOne:
# 构造函数
def __init__(self, name):
self.name = name
def to_high_station(self):
print('%s 到了高铁站' % self.name)
def buy_rail_tickets(self):
print('%s 买了高铁票' % self.name)
def geton_high_rail(self):
print('%s 坐上了高铁' % self.name)
def to_beijing(self):
print('%s 到了北京' % self.name)
if __name__ == '__main__':
# 创建一个类的对象
i = SomeOne('小明')
i.to_high_station()
i.buy_rail_tickets()
i.geton_high_rail()
i.to_beijing()
将该代码写在文件SomeOne.py
中,在控制台执行命令,如下:
$ python3 SomeOne.py
小明 到了高铁站
小明 买了高铁票
小明 坐上了高铁
小明 到了北京
在上面的代码中,我们定义了一个名叫SomeOne
的类,其中包含了我们需要的四个方法,另外还有一个__init__
的方法,这是类的构造函数(后续我们会详细讲解)。
在__main__
代码块中,我们创建了SomeOne
类的对象i
,并调用了该对象的四个方法。
下一节,我们来详细介绍类与对象
。
(完。)
推荐阅读:
Python 简明教程 --- 14,Python 数据结构进阶
Python 简明教程 --- 16,Python 高阶函数
Python 简明教程 --- 17,Python 模块与包
欢迎关注作者公众号,获取更多技术干货。
Python 简明教程 --- 18,Python 面向对象的更多相关文章
- Python 简明教程 --- 19,Python 类与对象
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 那些能用计算机迅速解决的问题,就别用手做了. -- Tom Duff 目录 上一节 我们介绍了Pyt ...
- Python 简明教程 --- 20,Python 类中的属性与方法
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 与客户保持良好的关系可以使生产率加倍. -- Larry Bernstain 目录 类中的变量称为属 ...
- Python 简明教程 --- 21,Python 继承与多态
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 程序不是年轻的专利,但是,它属于年轻. 目录 我们已经知道封装,继承和多态 是面向对象的三大特征,面 ...
- Python 简明教程 --- 22,Python 闭包与装饰器
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 当你选择了一种语言,意味着你还选择了一组技术.一个社区. 目录 本节我们来介绍闭包与装饰器. 闭包与 ...
- Python 简明教程 --- 23,Python 异常处理
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 要么做第一个,要么做最好的一个. 目录 我们在编写程序时,总会不自觉的出现一些错误,比如逻辑错误,语 ...
- 《Python简明教程》总结
Python经典教程<Python简明教程> 目录: 为什么Python 安装Python 体验Python Python数据类型 运算符与表达式 控制流 函数 模块 数据结构 解决问题 ...
- 【笔记】Python简明教程
Python简明教程,此资源位于http://woodpecker.org.cn/abyteofpython_cn/chinese/ s=u'中文字符' #u表示unicode,使用u之后能正常显示中 ...
- Python 简明教程 --- 8,Python 字符串函数
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 好代码本身就是最好的文档.当你需要添加一个注释时,你应该考虑如何修改代码才能不需要注释. -- St ...
- Python 简明教程 --- 12,Python 字典
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 代码写的越急,程序跑得越慢. -- Roy Carlson 目录 Python 字典是另一种非常实用 ...
随机推荐
- matlab单目相机标定——标定步骤以及参数含义
参考博客园的一篇文章: https://www.cnblogs.com/flyinggod/p/8470407.html#commentform
- vnc server,vnc server去哪下载,下载后如何连接使用(vnc viewer)
vnc server是vnc服务端,通过需要下载的服务器连接之后在服务器端下载. 1.使用到的工具:iis7服务器管理 2.首先去服务器端下载vnc 3.根据要求安装结束,得到登录密码. 4.用IIS ...
- 【朝夕技术专刊】RabbitMQ路由解析(上篇)
欢迎大家阅读<朝夕Net社区技术专刊> 我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦! 上篇文章介绍了如 ...
- Spring boot Sample 012之spring-boot-web-upload
一.环境 1.1.Idea 2020.1 1.2.JDK 1.8 二.目的 spring boot 整合web实现文件上传下载 三.步骤 3.1.点击File -> New Project -& ...
- Java 蓝桥杯 算法训练(VIP) 最大体积
最大体积 问题描述 每个物品有一定的体积(废话),不同的物品组合,装入背包会战用一定的总体积. 假如每个物品有无限件可用,那么有些体积是永远也装不出来的. 为了尽量装满背包,附中的OIER想要研究一下 ...
- Java实现 LeetCode 387 字符串中的第一个唯一字符
387. 字符串中的第一个唯一字符 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = "leetcode" 返回 0. s = ...
- Java实现 蓝桥杯VIP 算法训练 简单加法
时间限制:1.0s 内存限制:512.0MB 问题描述 首先给出简单加法算式的定义: 如果有一个算式(i)+(i+1)+(i+2),(i>=0),在计算的过程中,没有任何一个数位出现了进位,则称 ...
- Java实现 蓝桥杯VIP 算法提高 我们的征途是星辰大海
算法提高 我们的征途是星辰大海 时间限制:1.0s 内存限制:256.0MB 最新的火星探测机器人curiosity被困在了一个二维迷宫里,迷宫由一个个方格组成. 共有四种方格: '.' 代表空地,c ...
- java实现硬币方案
标题:硬币方案 有50枚硬币,可能包括4种类型:1元,5角,1角,5分. 已知总价值为20元.求各种硬币的数量. 比如:2,34,6,8 就是一种答案. 而 2,33,15,0 是另一个可能的答案,显 ...
- 两条命令实现nodejs快速安装
操作系统: debian, ubuntu, fedora 当前版本: v14.4.0 一键安装命令: curl -sL https://deb.nodesource.com/setup_14.x | ...