深入理解一下Python中的面向对象编程

news2024/9/24 17:13:02

 

Part1

如何面向“对象”

网上关于Java和**C++**的面向对象编程相关介绍的博客文章已经很多了,那我为什么还写呢?因为,人生苦短,刚好我是学Python的...

今天,我们就来走进面向对象编程的理想国——深入理解一下Python中的面向对象编程(Object-Oriented Programming,OOP)。

“日子一天一天过 我们会慢慢长大,我不管你懂不懂我在写什么...时光匆匆匆匆流走,也也也不回头...”

 

Part2

程序设计之面向对象编程

d4169c7816ce407f96534ac28c65a060.jpg

 

1 为什么需要程序设计?

在建筑行业,建筑师一般不会想要为一幢100层的大楼添加一个地下室,因为这样做无疑是成本过高,甚至有可能会失败。令人吃惊的是,在我们的软件开发行业中,当用户提出类似的改动时,都不会去多想。相反,老板或者产品经理可能会说这是一个简单的编程问题。(哈哈,这里无意中伤程序员与产品经理...)

但是,软件本质上是复杂的,随着项目的迭代,复杂性往往超出了人类智能的范围。

 

2 是否存在“最好的”设计?

在每一种工程实践中,设计都是一种训练有素的方法。不管是函数式编程、泛型编程、并发编程、面向过程基于对象面向对象等的程序设计,我们通过设计方法来创造某个问题的解决方案,从而提供时间需求的途径。

那么,是否存在“最好的”设计方法?

这个问题可能没有绝对的答案,但《没有“银弹”》告诉我们:没有单纯的技术或管理上的进步可以万无一失地让软件工程从需求得到一个复杂系统的实现。所以,面向对象也不是解决软件开发中所有问题的最后的“银弹”,如今很多高级编程语言提供了多种编程设计范式,Python也不例外。

 

3 为什么面向对象编程?

类是面向对象程序编程的主要工具,我们用它来定义新种类的方式,它在程序领域中反映了现实中的对象。而什么是面向对象编程呢?

面向对象编程是一种实现的方法,在这种方法中,程序被组织成许多组相互协作的对象,每个对象代表某个类的一个实例,而类则属于一个通过继承关系形成的层次结构。

来看一下概念中的三个要点:

  1. 利用对象作为程序的基本单元,而不是算法

  2. 每一个对象都是某个类的一个实例

  3. 类和类之间可以通过继承关系联系在一起

满足这三点才是叫面向对象的程序。我们用一个简单的例子来模拟一下

接着,我们先了解一下面向对象的三个核心概念:

1.  继承

通俗理解,“儿子从父亲那继承下来的东西”。如果在一个类的基础上创建新的有类,会将父类的属性和方法直接继承下来,从而减少重复代码的编写。提供继承信息(财产)的我们称为父类、或者基类、超类;得到继承信息的我们称为子类、或派生类或衍生类。

2.  多态

字面意思,“多种形态”,接口的不同实现方式即为多态。通过多态,子类可以扩展父类的能力,或者覆写父类的操作。

3.  封装

我对封装的理解,就像一个具有某些功能的黑箱子,隐藏一切可以隐藏的实现细节,然后对外提供简单的编程接口。

面向对象编程提供了一种有效的编程方式,利用这种方式,我们将代码冗余程度降到最低。因此,我们可以通过定制已有的代码来编写新的程序而不是在原处进行修改。

 

Part3

Python中的一切皆对象

在Python中,OOP是完全不是必须的,在初学阶段也不需要使用类,利用函数结构也能写出很多好用的脚本,完成很多有趣的编程。但是Python OOP也非常有意思,不信你跟我一起学学。

Java虽然也是面向对象编程的语言,但是血统没有Python纯正。比如Java的八种基本数据类型之一int,在持久化的时候,就需要包装成Integer类对象。

与Java相比,Python的面向对象更彻底。学过Python的朋友可能知道,在Python中,把我们所有能看到的都变成对象——数字、字符串、元组、列表、字典、函数、方法、类、模块、包括你的代码。

怎么理解这个过程呢?Python 中的一切都可以赋值给变量或者作为参数传递给函数,我们来看一下代码:

a = 3
b = a
print(a)  # 打印:3
print(b)  # 打印:3

def all_is_object():
    print("Learing Python OOP")
    
all_is_well = all_is_object
all_is_object() # 打印:Learing Python OOP
all_is_well()  # 打印:Learing Python OOP

class Person():
    def __init__(self, name):
        print("姓名:", name)
        
A = Person
xiaoyu = A("小宇")  # 姓名: 小宇

 

Part4

Python对象的三个特性

Python 的所有对象都有三个特性:身份(id)类型(type)值(value)

  • 身份(id):每个对象都有一个唯一的身份标识自己,任何对象的身份都可以使用内建函数 id() 来得到,可以简单的认为这个值是该对象的内存地址。

a = 3
b = a
id(a)
id(b)
id(test_list)
  • 类型(type):对象的类型决定了对象可以保存什么类型的值,有哪些属性和方法,可以进行哪些操作,遵循怎样的规则。可以使用内建函数 type() 来查看对象的类型。

a = 3
b = a
print(type(a))  # <class 'int'>
print(type(int))  # <class 'type'>

test_list = [1, 2, 3, 4, 5]
print(type(test_list))  # <class 'list'>
print(type(list))  # <class 'type'>

test_tuple = (1, 2, 3, 4, 5)
print(type(test_tuple))    # <class 'tuple'>
print(type(tuple))    # <class 'type'>

test_str = "I love python"
print(type(test_str))  # <class 'str'>
print(type(str))  # <class 'type'>
  • 值(value):对象所表示的数据

print(a)  # 3
print(test_list)  # [1, 2, 3, 4, 5]
print(test_str)    # I love python

"身份"、"类型"和"值"在所有对象创建时被赋值。只要对象存在,这三个特性就一直存在。

 

Part5

总结

事实上,我们学习的软件框架(framework)就是父类的集合,框架就是把常见的程序设计任务实现成类,我们所需要做的就是通过编写自己的子类,组合和定制已调试过的代码。此外,将常见的OOP结构归类,就是我们的设计模式(design pattern),来协助解决设计中的问题。

这些软件框架可能提供一些数据库接口、测试协议、GUI工具包等

 

欢迎点赞收藏转发🙏🙏

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/611014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年6月杭州/广州/深圳NPDP产品经理认证招生简章

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

Go语言反射编程指南

反射[1]是一种编程语言的高级特性&#xff0c;它允许程序在运行时检视自身的结构和行为。通过反射&#xff0c;程序可以动态地获取类型(type)与值(value)等信息&#xff0c;并对它们进行操作&#xff0c;诸如修改字段、调用方法等&#xff0c;这使得程序具有更大的灵活性和可扩…

【论文阅读】用于大型城市场景的网格引导神经辐射场

【论文阅读】用于大型城市场景的网格引导神经辐射场 Abstract1. Introduction2. Related Works and Background大规模场景重建和渲染体积场景表示大尺度NeRF 3. Grid-guided Neural Radiance Fields3.1. Multi-resolution Feature Grid Pre-train3.2. Grid-guided Neural Radia…

AI炒股回报率500%?内行揭秘玄机

一篇来自佛罗里达大学的研究报告震惊了金融圈&#xff1a;用ChatGPT对公司新闻进行情绪分析&#xff0c;并按此在股市做多、卖空&#xff0c;最高可获得超过500%的投资回报率。虽然坊间对这份报告中惊人的回报率数据有所怀疑&#xff0c;但金融界正在因AI的介入发生改变。 摩根…

港联证券|龙头齐聚,本周7股将申购!今年第三高价新股也要来了?

本周&#xff08;6月5日—6月9日&#xff09;&#xff0c;共有7只新股将进行申购&#xff0c;其中创业板5只&#xff08;康力源、飞沃科技、恒勃股份、威士顿、海看股份&#xff09;、科创板2只&#xff08;西高院、智翔金泰&#xff09;。 资料显示&#xff0c;康力源是国内健…

Windows下安装与使用Kafka(使用Kafka内置的ZooKeeper图文结合版)

文章目录 Windows安装Kafka1.安装JDK并配置好对应的环境变量 2.安装配置Zookeeper1.下载安装包Apache Zookeeper2.解压并进入Zookeeper目录 防止端口8080启动后被占用&#xff0c;这里考虑先配置下3.安装Kafka3.1 下载安装包3.2、 解压并进入Kafka目录&#xff0c; Windows安装…

Vue.js 中的指令自定义是什么?如何自定义指令?

Vue.js 中的指令自定义是什么&#xff1f;如何自定义指令&#xff1f; Vue.js是一种流行的前端框架&#xff0c;它提供了一种称为“指令”的技术&#xff0c;用于操作DOM元素。Vue.js中内置了一些常用的指令&#xff0c;如v-if、v-show、v-for等。除了内置指令外&#xff0c;V…

基于Tensorflow+VGG+DBN本地化批量图像识别系统(深度学习+Python)含全部工程源码+视频演示+图片数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境1. Python 环境2. Tensorflow 环境3. wxPython 环境4. PIL 环境 模块实现1. 数据预处理2. 模型简化处理3. 用户界面设计4. 翻译模块调用 系统测试1.模型训练效果2. 模型测试效果 代码实现1. 用户界面设计及模型调用2. 模型搭…

如何从消失的异常堆栈定位线上问题

一、消失的异常堆栈 如何快速定位问题&#xff1f;想必大家心中都有自己的答案&#xff0c;当然最简单直接的办法还是查找异常堆栈信息。 然而有时异常堆栈并不完整&#xff0c;只有一句描述&#xff0c;如下&#xff1a; Caused by: java.lang.NullPointerException 造成这…

显存容量一键翻倍性能暴涨,N卡遗留漏洞被破解了

2K、4K 高分辨率的普及&#xff0c;加上游戏特效进步复苏&#xff0c;显存容量的需求也提升了一个台阶。 经过测试&#xff0c;某些游戏最大显存占用已经超出 12GB &#xff0c;即便 1080P 也占用不低。 再到生产力、AI &#xff0c;显存就更容易爆炸。 显存这玩意不像内存可以…

通用文字识别OCR 之实现数字化教材

引言 通用文字 OCR 识别 API 是一种功能强大的服务&#xff0c;可用于多场景、多语种的整图文字检测和识别&#xff0c;通过将OCR技术应用于学校环境&#xff0c;可以实现教育资源的数字化和学习过程的自动化。 本文将探讨通用文字识别OCR 在学校的实际应用&#xff0c;希望对…

linux进阶 --- 环境搭建、单一执行、循环执行

环境搭建 操作环境 : 创建完虚拟机&#xff0c;安装命令行界面的linux操作系统&#xff08;centos8&#xff0c;rocky8&#xff0c;rhel8&#xff09;为服务器配置白名单和安全组 &#xff1a;vim /etc/selinux/config&#xff0c;selinuxdisabled&#xff08;getenforce&…

chatgpt赋能python:Python图片处理教程

Python 图片处理教程 Python 是一种功能强大的编程语言&#xff0c;广泛应用于大量不同的行业和领域。其中之一是图像处理和分析。Python 提供了一个庞大的图像库&#xff0c;其拥有大量的工具和函数。Python 图像库具有高度的可扩展性&#xff0c;可以很容易地将其与其他库集…

图解LeetCode——199. 二叉树的右视图

一、题目 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 二、示例 2.1> 示例 1: 【输入】 [1,2,3,null,5,null,4] 【输出】 [1,3,4] 2.2> 示例 2: 【输入】 [1,null,3] …

ipad笔买原装还是平替?苹果平替电容笔推荐

我认为苹果的电容笔跟一般的电容笔最大的不同就是&#xff0c;苹果原装电容笔有一种特殊的重力压感&#xff0c;可以让我们在纸上感受到最真实的线条粗细变化&#xff0c;用来作画再合适不过了。这是市场上普通电容笔所不具备的功能特性。除了这些&#xff0c;这两款电容笔在写…

【启扬方案】助力智能制造,MES系统解决方案

近年来&#xff0c;智能制造席卷全球&#xff0c;越来越多的制造企业开始采用智能化的生产制造方式&#xff0c;智能工厂作为智能制造的核心之一&#xff0c;成为了制造业发展的重要趋势之一。然而&#xff0c;要实现智能工厂的建设&#xff0c;需涵盖从生产计划、生产调度到生…

安卓调试|入门扫盲必备adb调试工具介绍、安装使用说明

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; “ 花开堪折直须折&#xff0c;莫待无花空折枝。 ” 作者主页&#xff1a;[ https://www.weiyigeek.top ] 博客&…

11 Redis大厂真实需求落地案例实战

案例实战&#xff1a;微信抢红包 需求分析 各种节假日&#xff0c;发红包抢红包&#xff0c;不说了&#xff0c;100%高并发业务要求&#xff0c;不能用mysql来做一个总的大红包&#xff0c;会有可能拆分成多个小红包&#xff0c;总金额 分金额1分金额2分金额3…分金额N每个人…

【Python编程从入门到实践第一版】P1 变量的命名规则

变量的命名规则 在python中使用变量时&#xff0c;需要遵守一些规则&#xff1a; 变量名只能包含字母、数字和下划线&#xff1b;变量名不能以数字开头&#xff0c;但是可以以字母后者下划线开头&#xff1b;变量名不能包含空格&#xff1b;Python关键字以及函数名不能用作变量…

2.3 基于reactor的HTTP服务器实现

目录 一、基于reactor的HTTP服务器实现二、实现按行读取三、HTTP服务器的收—实现requets函数四、HTTP服务器的发—实现response函数方法之一&#xff1a;open and read五、HTTP服务器的发—实现response函数方法之二&#xff1a;sendfile()1、sendfile函数2、实现3、结果展示 …