微信公众号:码农充电站pro

个人主页:https://codeshellme.github.io

代码能借用就借用。

—— Tom Duff

目录

编程可分为面向过程编程面向对象编程,它们是两种不同的编程方式,当然背后的思维方式也是不同的。面向过程编程是一种传统的编程方式,面向对象编程是一个更高级的编程方式。

1,面向过程编程

面向过程编程(POP)的重点在于过程二字。

面向过程比较好理解,就是按照人们通常的思维方式,在做一件事情的时候,将这件事情划分为多个步骤,一步一步来做。

面向过程编程,就是在进行一个项目时,将这个项目分为多个小的步骤,一个步骤就是一个过程,将这些过程全部组织起来,就形成了完整的项目。

C 语言是典型的面向过程编程语言

比如,我们可以将我要去北京这件事情分为以下四个步骤:

  1. 去高铁站
  2. 购买高铁票
  3. 持票上高铁
  4. 坐高铁到北京

这里的每个步骤相当于一个过程,我们将这些过程封装成函数,然后,从前到后将这些函数组织起来,就完成了我要去北京这件事情。

我们将这个过程用简单的代码实现如下,将该代码保存在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 简明教程 --- 13,Python 集合

Python 简明教程 --- 14,Python 数据结构进阶

Python 简明教程 --- 15,Python 函数

Python 简明教程 --- 16,Python 高阶函数

Python 简明教程 --- 17,Python 模块与包


欢迎关注作者公众号,获取更多技术干货。

Python 简明教程 --- 18,Python 面向对象的更多相关文章

  1. Python 简明教程 --- 19,Python 类与对象

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 那些能用计算机迅速解决的问题,就别用手做了. -- Tom Duff 目录 上一节 我们介绍了Pyt ...

  2. Python 简明教程 --- 20,Python 类中的属性与方法

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 与客户保持良好的关系可以使生产率加倍. -- Larry Bernstain 目录 类中的变量称为属 ...

  3. Python 简明教程 --- 21,Python 继承与多态

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 程序不是年轻的专利,但是,它属于年轻. 目录 我们已经知道封装,继承和多态 是面向对象的三大特征,面 ...

  4. Python 简明教程 --- 22,Python 闭包与装饰器

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 当你选择了一种语言,意味着你还选择了一组技术.一个社区. 目录 本节我们来介绍闭包与装饰器. 闭包与 ...

  5. Python 简明教程 --- 23,Python 异常处理

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 要么做第一个,要么做最好的一个. 目录 我们在编写程序时,总会不自觉的出现一些错误,比如逻辑错误,语 ...

  6. 《Python简明教程》总结

    Python经典教程<Python简明教程> 目录: 为什么Python 安装Python 体验Python Python数据类型 运算符与表达式 控制流 函数 模块 数据结构 解决问题 ...

  7. 【笔记】Python简明教程

    Python简明教程,此资源位于http://woodpecker.org.cn/abyteofpython_cn/chinese/ s=u'中文字符' #u表示unicode,使用u之后能正常显示中 ...

  8. Python 简明教程 --- 8,Python 字符串函数

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 好代码本身就是最好的文档.当你需要添加一个注释时,你应该考虑如何修改代码才能不需要注释. -- St ...

  9. Python 简明教程 --- 12,Python 字典

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 代码写的越急,程序跑得越慢. -- Roy Carlson 目录 Python 字典是另一种非常实用 ...

随机推荐

  1. dell5460笔记本电脑ubuntu18.04系统音频驱动的安装和使用

    一.背景: 近期使用dell5460笔记本在ubuntu系统下观看视频,发现没有声音,考虑安装音频驱动. 二.音频驱动的安装 linux系统的音频驱动基于ALSA(即Advanced Linux So ...

  2. IntelliJ IDEA连接不上数据库 (Connection to testdb@localhost failed. [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.)

    问题提示为: 原因:MySQL数据库版本为8.0以上,需要在URL加上时区,即加上?serverTimezone=GMT 成功后为:

  3. 面试问题---JAVA程序CPU占用过高怎么定位

    今天一个电话面试问了这个问题.回来查了下答案,自己也顺带操作一遍,做个记录.之前知道jstack工具可以查看线状态这些.比如死锁这些,主要是之前不知道top -H -p pid这个命令的使用,这命令可 ...

  4. (Java实现) 最大团问题 部落卫队

    首先介绍下最大团问题: 问题描述:给一个无向图G=(V,E) ,V是顶点集合,E是边集合.然后在这顶点集合中选取几个顶点,这几 个顶点任意两个之间都有边在E中.求最多可以选取的顶点个数.这几个顶点就构 ...

  5. Java实现 蓝桥杯VIP 算法训练 链表数据求和操作

    算法训练 9-7链表数据求和操作 时间限制:1.0s 内存限制:512.0MB 读入10个复数,建立对应链表,然后求所有复数的和. 样例输入 1 2 1 3 4 5 2 3 3 1 2 1 4 2 2 ...

  6. Java实现 LeetCode 1227 飞机座位分配概率

    1227. 飞机座位分配概率 有 n 位乘客即将登机,飞机正好有 n 个座位.第一位乘客的票丢了,他随便选了一个座位坐下. 剩下的乘客将会: 如果他们自己的座位还空着,就坐到自己的座位上, 当他们自己 ...

  7. Java实现 LeetCode 45 跳跃游戏 II(二)

    45. 跳跃游戏 II 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 示例: 输入: [ ...

  8. Java实现 LeetCode 21 合并两个有序链表

    21. 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1 ...

  9. 第三届蓝桥杯JavaB组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.数量周期 [结果填空](满分9分) 复杂现象背后的推动力,可能是极其简单的原理.科学的目标之一就是发现纷繁复杂的自然现象背后的简单法则 ...

  10. java实现第七届蓝桥杯冰雹数

    题目8.冰雹数 题目描述 任意给定一个正整数N, 如果是偶数,执行: N / 2 如果是奇数,执行: N * 3 + 1 生成的新的数字再执行同样的动作,循环往复. 通过观察发现,这个数字会一会儿上升 ...