编程是一门艺术。和艺术一样,选择合适的画笔和颜料对于创作出最好的作品至关重要。 Python面向对象编程就是这样一种技能。
选择正确的编程语言是任何项目的关键部分,它可以导致流畅和愉快的开发或彻底的噩梦。因此,最好为您的用例使用最适合的语言。
这是在Python中学习面向对象编程的主要原因,Python也是最流行的编程语言之一。让我们来学习!
- 一个示例Python程序
- 学习Python OOP的要求
- 什么是Python中的面向对象编程?
- 为什么我们在Python中使用面向对象编程?
- Python中的一切都是对象
- 你在Python中的第一个对象
- Python中OOP的4个支柱
- 构建区域形状解析器计算器
一个示例Python程序
在深入探讨这个问题之前,让我们提出一个问题:你有没有写过像下面这样的Python程序?
此代码是一个简单的数字猜测器。尝试将其复制到 Python 文件中并在您的系统中运行它。它完美地实现了它的目的。
但是这里出现了一个大问题:如果我们要求您实现一个新功能怎么办?它可能很简单——例如:
“如果输入是密码的倍数,给用户一个提示。”
随着特征数量的增加以及嵌套条件的总数的增加,程序会迅速变得复杂和繁重。
这正是面向对象编程试图解决的问题。
学习Python OOP的要求
在开始面向对象编程之前,我们强烈建议您牢牢掌握Python基础知识。
对被视为“基本”的主题进行分类可能很困难。因此,我们设计了一份备忘单,其中包含在Python中学习面向对象编程所需的所有主要概念。
- 变量:指向特定对象的符号名称(我们将通过文章了解对象的含义)。
- 算术运算符:加法 (+)、减法 (-)、乘法 (*)、除法 (/)、整数除法 (//)、模 (%)。
- 内置数据类型:数字(整数、浮点数、复数)、序列(字符串、列表、元组)、布尔值(真、假)、字典和集合。
- 布尔表达式:结果为真或假的表达式。
- 条件:评估布尔表达式并根据结果进行一些处理。由if/else语句处理。
- 循环:重复执行代码块。它可以是for或while循环。
- 功能:有组织和可重用的代码块。您可以使用关键字def创建它们。
- 参数:传递给函数的对象。例如:
sum([1, 2, 4])
- 运行Python脚本
- 打开Python脚本:打开终端并键入
python
或python3
(取决于您的系统)。
现在您已经清楚地了解了这些概念,您可以继续理解面向对象编程。
什么是Python中的面向对象编程?
面向对象编程 (OOP) 是一种编程范式,我们可以在其中将复杂问题视为对象。
范式是为解决问题提供基础的理论。
因此,当我们谈论OOP时,我们指的是一组用于解决对象问题的概念和模式。
Python中的对象是数据(属性)和行为(方法)的单一集合。您可以将物体视为您周围真实的事物。例如,考虑计算器:
计算器可以是一个对象
您可能会注意到,数据(属性)始终是名词,而行为(方法)始终是动词。
这种划分是面向对象编程的核心概念。您构建存储数据并包含特定类型功能的对象。
为什么我们在Python中使用面向对象编程?
OOP允许您创建安全可靠的软件。许多Python框架和库使用这种范式来构建它们的代码库。一些示例是Django、Kivy、pandas、NumPy和TensorFlow。
让我们看看在Python中使用OOP的主要优势。
Python OOP的优点
以下原因将使您选择在Python中使用面向对象编程。
所有现代编程语言都使用OOP
这种范式与语言无关。如果您在Python中学习了OOP,您将能够在以下方面使用它:
所有这些语言要么是本机面向对象的,要么包含面向对象功能的选项。如果你想在Python之后学习它们中的任何一个,它会更容易——你会发现处理对象的语言之间有许多相似之处。
OOP使您可以更快地编码
更快的编码并不意味着编写更少的代码行。这意味着您可以在更短的时间内实现更多功能,而不会影响项目的稳定性。
面向对象编程允许您通过实现抽象来重用代码。这一原则使您的代码更加简洁易读。
您可能知道,程序员花在阅读代码上的时间比编写代码的时间多得多。这就是易读性始终比尽快推出功能更重要的原因。
代码不清晰导致生产力下降
稍后您将看到有关抽象原则的更多信息。
OOP帮助您避免意大利面条式代码
还记得本文开头的猜数程序吗?
如果您继续添加功能,将来您将拥有许多嵌套的if语句。这种无休止的代码行缠结称为意大利面条式代码,您应该尽可能避免使用它。
OOP为我们提供了压缩对象中所有逻辑的可能性,因此避免了嵌套的长段if 。
OOP改善您对任何情况的分析
一旦您获得了一些OOP的经验,您就能够将问题视为小而具体的对象。
这种理解导致快速的项目初始化。
结构化编程与面向对象编程
结构化编程是初学者最常用的范式,因为它是构建小程序的最简单方法。
它涉及按顺序运行Python程序。这意味着你给计算机一个任务列表,然后从上到下执行它们。
让我们看一个带有咖啡店程序的结构化编程示例。
small = 2 regular = 5 big = 6 user_budget = input('What is your budget? ') try: user_budget = int(user_budget) except: print('Please enter a number') exit() if user_budget > 0: if user_budget >= big: print('You can afford the big coffee') if user_budget == big: print('It\'s complete') else: print('Your change is', user_budget - big) elif user_budget == regular: print('You can afford the regular coffee') print('It\'s complete') elif user_budget >= small: print('You can buy the small coffee') if user_budget == small: print('It\'s complete') else: print('Your change is', user_budget - small)
上面的代码充当咖啡店供应商。它会询问你的预算,然后“卖”给你你能买到的最大的咖啡。
尝试在终端中运行它。它将根据您的输入逐步执行。
这段代码运行良好,但我们有三个问题:
- 它有很多重复的逻辑。
- 它使用许多嵌套的if条件。
- 阅读和修改会很困难。
OOP的发明是为了解决所有这些问题。
让我们看看上面用OOP实现的程序。如果您还不明白,请不要担心。它仅用于比较结构化编程和面向对象编程。
注意:本文将更深入地解释以下所有概念。
上面的代码代表一个名为“Coffee”的类。它有两个属性——“name”和“price”——它们都在方法中使用。主要方法是“销售”,它处理完成销售过程所需的所有逻辑。
如果您尝试运行该类,您将不会得到任何输出。这主要是因为我们只是为咖啡声明了“模板”,而不是咖啡本身。
让我们使用以下代码实现该类:
small = Coffee('Small', 2) regular = Coffee('Regular', 5) big = Coffee('Big', 6) try: user_budget = float(input('What is your budget? ')) except ValueError: exit('Please enter a number') for coffee in [big, regular, small]: coffee.sell(user_budget)
在这里,我们正在制作“Coffee”类的实例或咖啡对象,然后调用每种咖啡的“sell”方法,直到用户负担得起任何选项。
我们将使用两种方法获得相同的输出,但我们可以使用OOP更好地扩展程序功能。
下表比较了面向对象编程和结构化编程:
面向对象编程 | 结构化编程 |
更易于维护 | 难以维护 |
不要重复自己 (DRY) 方法 | 多处重复代码 |
多处复用的小段代码 | 几个地方的大量代码 |
对象方法 | 块码方法 |
更容易调试 | 更难调试 |
大学习曲线 | 更简单的学习曲线 |
用于大型项目 | 优化为简单程序 |
原文地址:https://www.wbolt.com/python-object-oriented-programming.html