python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)...

2023-11-13

年轻人,你渴望力量吗?

你渴望拥有对象吗?

让我们面向对象

重建“家园”吧!

95bb873d43baa3f7530b4c60491fd947.png

一.面向对象的简介

众所周知,python是一门面向对象的编程语言,但是,你知道什么是面向对象吗?

在说面向对象之前,我们先来说一说什么是对象。

之前的博客有简单涉入 一.认识对象

1.对象

通俗的来讲,对象就是内存中用来存储指定数据的一块区域。\color{blue}{通俗的来讲,对象就是内存中用来存储指定数据的一块区域。}通俗的来讲,对象就是内存中用来存储指定数据的一块区域。

(1).对象包含的元素

每个对象中都含有三种数据:id(标识)、type(类型)、value(值)。

①.id(标识)

id是由我们的解析器生成,在我们使用的python(默认cpython)中,id就是对象的内存地址。

我们可以通过比较对象的id来辨别是否是同一个对象。

②.type(类型)

type用来标识当前对象所属的类型,不同的类型决定了对象的不同功能。

python是一门强类型的动态脚本语言,当一个对象被赋值(创建),该对象的类型就已经被确定,且不允许不同类型的相加。

③value(值)

value就是对象中存储的具体数据。

之前博客有写,对象的分类:可变对象和不可变对象,可变对象的值可以更改,而不可变对象则不能。

#对象

def fn():

a = 1

return '奥利给'

print(fn,id(fn),type(fn))

print(fn(),id(fn()),type(fn()))

a3e22dde5a4c0228ee89622e20a2e603.png

当我们对对象有了更基础的认识后,接下来的面向对象就很好理解了。在说面向对象之前我们先 举个栗子:

买冰棍

1.穿鞋

2.下楼

3.到超市

4.选冰棍

5.买冰棍

2.面向对象

简单来讲,我们把问题拆分成各种对象,我们的所有操作都是通过对象来进⾏的。这样一种操作方式,称为面向对象。

⾯向对象关注的是对象,对于以上问题,我们可以用 买冰棍 进行解决。对于怎么买(拆分的思想),后续我们会解决。

(1).面向对象的三大特点

封装

继承

多态

ps:关于这三大特点,我们会在后面的文章进行展开。

3.面向过程

面向过程(Procedure Oriented)是一种以过程为中心的编程思想。

⾯向过程是指将我们的问题分解为⼀个⼀个步骤,通过对每个步骤的抽象来完成解答。

对于上述 买冰棍的过程 ,则是面向过程的编程方式,这种方式易于人们理解。

大家可能会问,为什么要引入面向过程呀,因为,没有对比就没有伤害,哈哈哈嗝。其是就是通过对不同编程思想的比较,进一步加深我们对面向对象的理解,而且还能拓展知识面(面向过程)。是不是真香!

e3b7a26a0ff9a0e6dac316f2397c0d8d.png

4.面向对象VS面向过程

⾯向对象的编程⽅式⽐较容易阅读,并且易于维护,容易复⽤。但是编写的过程中不太符合常规的思维,编写相对麻烦。

面向过程的编程思想往往适⽤于单个功能,代码复⽤性⽐较低。如果要实现别的功能,需要更换大量代码,费事,耗时。但是通俗易懂。

之前博客介绍的都是Python的内置对象(列表(list())、字符串(str())、元组(tuple())、字典(dict())等),但是有的时候内置对象并不都能满⾜我们的需求,所以我们在开发中经常要⾃定义⼀些对象,那么也就引申出了 类 。

二.类(class)

1.类的定义

类(Class): 用来描述具有相同属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

类和对象都是生活中的抽象。

所有的事物都有两个部分组成:

属性(数据):例如你的身高、体重

方法(行为):例如做家务、上班

2.类的说明

类:简单理解它就是相当于⼀个图纸,在程序中我们需要根据类来创建对象。

类也是对象,是用来创建对象的对象。

对象是类的实例。

如果多个对象是通过一个类创建出来的,我们称这些对象是一类对象。

#类

a = 123

b = '奥利给'

print(a,type(a))

a = int(123) #创建了一个int型的实例

b = str('奥利给') #创建了一个str型的实例

print(b,type(b))

c53235e05da87542efaebbf090af5bbf.png

(1).类的语法

class 类名([父类]):

代码块

举个栗子:

class MyClass():

pass #Python中 pass 是空语句(占位语句),加入是为了保持程序结构的完整性。

(2).类的延伸

class myclass():

pass

print(myclass)

f4bdd5926d6fe3910bbd81b38a0f3830.png

通过这个代码块,我们可以了解,我们创建了一个名为 myclass的类对象 。

class myclass():

pass

print(myclass)

m1 = myclass() #m1是通过myclass创建的,所以m1是myclass的实例

print(m1,type(m1))

#isinstance(),用来检查其中的对象是否是该类的实例

a = isinstance(m1,myclass)

print(a)

82b47a611bb759e3dfb9daed06ab981f.png

我们用 isinstance()函数 来查询我们的对象 m1 ,是否是 myclass 的实例,结果返回True。

类是一个type类型的对象,我们定义类实际上就是定义了一个type类型的对象。

#定义对象

class myclass():

pass

print(id(myclass),type(myclass))

fd470c09f2bc9390395855827b35869e.png

3.属性和方法

在类的代码块中,我们可以定义变量和函数

变量会成为该类实例的公共属性,所有的该实例都可以通过 对象.属性名的形式访问

函数会成为该类实例的公共⽅法,所有该类实例都可以通过 对象.⽅法名的形式访问

(1).属性

我们目前创建的类对象都是空对象,但是我们可以向对象中添加变量,这个变量我们称之为属性。

语法:对象.属性名 = 属性值

class myclass():

pass

print(id(myclass),type(myclass))

m1 = myclass()

m1.name = '奥利给' #对象m1,属性名name,属性值‘奥利给’

print(m1.name)

1ed4984bb4b439e26e073eaf5783d1de.png

在类中的代码块,我们可以定义变量和函数

在类中定义的变量,将会成为所有实例的公共属性。

举个栗子:

#定义一个手机

class Mobile():

a = '华为'

b = 123

p1 = Mobile()

p2 = Mobile()

print(p1,p2)

print(p1.a,p2.b)

b_0_202007071252448100.jpg

这里的 a和b ,是类对象Mobile中的变量,而 p1和p2 ,是类对象Mobile的实例对象,我们通过 p1.a和p2.b 的方式来为实例对象 ==p1和p2添加属性值。

(2).方法

语法:对象.方法名 = 方法值

#定义一个人

class Person():

name = '和尚'

def Speak(): #创建了一个方法Speak

print('奥利给!!!')

p1 = Person()

p2 = Person()

p1.Speak()

4537b298a83a37b7a902110aa47a2b18.png

由上述的代码报错提示我们可以看出,方法 Speak() 少了一个参数,当你传入了一个参数后,程序正常运行。

907715c621c99fa9fef5d0ffed048447.png

注意:笔者使用的是python 3.7 的版本。随着python的不断迭代,在创建方法时,会默认自动传递 self 参数,而之前的版本,可能并不能自动传参。

补充:有的小伙伴可能会好奇,我们在创建类的时候,在阅读别人的代码时有的会加小括号 () ,有的则没有加。

#创建类带括号

class Person:

pass

class Person1():

pass

0b0dbd95c2b31dd02164c925f48d9ba3.png

对于括号而言,其实没有差别。但是如果是有类的继承,则需要加上。

加括号是新的书写形式,建议在进行代码的书写时,加上括号。

(3).函数调用和方法调用的区别

函数调用:一般情况下,形参和实参的数量是对等的。

方法调用:在我们调用方法时,方法至少要有一个形参。

(4).属性(方法)的查找流程

当我们调⽤⼀个对象的属性时,解析器会在当前的对象中寻找是否有该属性,如果有,则直接返回当前的对象的属性值。如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值。如果没有就报错。

举个栗子:

#属性(方法)的查找流程

class Mobile():

a = 123

b = '奥利给'

p1 = Mobile()

p2 = Mobile()

p1.a = 234

print(p1.a,p2.b)

print(p2.c)

2c3f403e01907139563ad353ec12012f.png

类对象和实例对象都可以保存属性(方法),

如果这个属性(方法)是共享的,则应该保存在类对象中;

如果这个属性(方法)是独有的,则应该保存在实例对象中;

一般地,属性保存在实例对象中(独特性),方法保存在类对象中。

三.参数self

在说self的使用之前,我们先看一个代码块。

#在类对象中创建的方法

class Person():

name = '李云龙'

def Speak(n):

print(n)

n1 = Person()

n2 = Person()

n1.name = '张三'

n2.name = '李四'

n1.Speak()

n2.Speak()

print(n1)

d1c823d994900918c27742cf9fd0d8d3.png

通过之前的讲述,我们了解到:

在类对象中定义方法默认需要传递一个参数。

通过上述代码块,我们了解到,在调用方法时,调用的对象(参数)就是调用者本身。

n1调用方法Speak,调用的对象(参数),就是n1。

1.self的使用

其实 self参数 就相当于上面代码块的 参数n ,只是,我们为了 代码的规范化 ,把方法中传递的参数称作self参数(很形象,传递自己)。

举个栗子:

#self参数

class Person():

name = '李云龙'

def Speak(self):

print('%s的意大利炮'%self.name)

print('{}的意大利炮'.format(self.name))

n1 = Person()

n2 = Person()

n1.name = '张三'

n2.name = '李四'

n1.Speak()

n2.Speak()

0a2daef73a1b7af014b0ef384f31c4d7.png

写到这,这篇博客基本完结,如果想起了什么,我还会继续补充。

笔者感言:其实越往后深入,你会发现,前面的知识用的越来越多,你也就越来越熟练,记忆也越来越深。纸上得来终觉浅,绝知此事要躬行。

本文地址:https://blog.csdn.net/weixin_45095678/article/details/107073246

希望与广大网友互动??

点此进行留言吧!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)... 的相关文章

  • VS Code 快捷键(中英文对照版)

    标签 空格分隔 visual studio code 常用 General 按 Press 功能 Function Ctrl Shift P F1 显示命令面板 Show Command Palette Ctrl P 快速打开 Quick
  • 快速解决QQ自动下载腾讯视频播放器

    使用电脑QQ播放视频时 QQ总是会使用默认安装的腾讯视频播放器打开 可是他的这个播放器非常的卡 自己设置的默认不使用播放仍然不起作用 用geek观察了一下电脑 确实没发现腾讯视频 于是在播放视频的时候打开任务管理器 终于发现了腾讯视频播放器
  • 原理图以及vhdl设计一位全加器

    原理图设计以及VHDL设计 一位加法器 全加器原理 全加器真值 输出表达式 原理图设计法 VHDL设计法 代码如下 全加器是用门电路实现两个二进制数相加并求出和的组合线路 称为一位全加器 一位全加器可以处理低位进位 并输出本位加法进位 多个
  • 【目标检测】各种方法中比较难理解的地方

    1 评价指标mAP 全网最清楚的解释 强推 原文链接 http blog sina com cn s blog 9db078090102whzw html 理解的关键点在于每一次的precision和recall计算都是在top X的基础上
  • VMware虚拟机装win7教程

    VMware虚拟机装win7教程 前言 一 VMware虚拟机装win7 二 装Vmware Tools 1 初步装好win7后 要装Vmware Tools 2 搞不定的接着往下看 也是本人遇到的问题 总结 前言 昨晚想要在win10系统
  • 初识RecyclerView

    使用之前 implementation com android support recyclerview v7 26 1 0 添加v7的依赖 不然Recyclerview不给用 1 Xml布局 此处布局文件有两个 一个是整体的父布局文件 代
  • 利用Python实现几种常见排序算法

    一 排序算法概览 插入排序 直接插入排序 二分法插入排序 选择排序 直接选择排序 堆排序 交换排序 冒泡排序 快速排序 归并排序 二 代码实现 1 直接插入排序 最简单直接的一种方式 序列在排序中可分为左边已排序部分和右边未排序部分 每次从
  • 拷贝构造函数与深拷贝和浅拷贝

    拷贝构造函数是一种特殊的构造函数 函数的名称必须和类名称一致 它必须的一个参数是本类型的一个引用变量 作用就是用来复制对象 在使用这个对象的实例来初始化这个对象的一个新的实例 类中可以存在多个拷贝构造函数 拷贝构造函数的调用时机 当函数的参
  • Java中的代理(一)

    一 概念 代理 Proxy 是一种设计模式 提供了对目标对象另外的访问方式 即通过代理对象访问目标对象 这样做的好处是 可以在目标对象实现的基础上 增强额外的功能操作 即扩展目标对象的功能 重要的编程思想 不要随意去修改别人已经写好的代码或
  • Java中成员变量、局部变量、全局变量、静态变量存在位置及初始化

    根据定义变量位置的不同 可以将变量分为成员变量和局部变量 成员变量是 定义在一个类的变量 类中方法外 局部变量是定义在一个方法内的变量 方法中 成员变量分为 静态属性 随类的存在而存在 是在类加载的初始化 非静态属性 随实例的属性存在而存在
  • vsnprintf用法解析

    int vsnprintf char s size t n const char format va list arg 描述 将格式化数据从可变参数列表写入大小缓冲区 如果在printf上使用格式 则使用相同的文本组成字符串 但使用由arg
  • 深度解析转置卷积,理解转置卷积的原理

    参考文章 转置卷积 Transposed Convolution 太阳花的小绿豆的博客 CSDN博客 转置卷积 抽丝剥茧 带你理解转置卷积 反卷积 史丹利复合田的博客 CSDN博客 逆卷积和转置卷积 参考视频 转置卷积 transposed
  • 【Unity3D】回合制游戏

    回合制游戏一直在游戏史 至少是在中国的游戏历史上扮演很重要的角色 从仙剑到梦幻 这类游戏深受玩家喜爱 那么在Unity3D中怎么实现呢 下面用一个比较简单Unity3D的一对一回合制游戏来说明这个问题 其实也不难 关键是理清各个处理关系 如
  • Bootstarp学习教程(12) 导航组件

    导航 Bootstrap中可用的导航有相似的标记 用基类 nav开头 这是相似的部分 改变修饰类可以改变样式 标签页 注意 nav tabs类需要 nav基类
  • Mathematica学习笔记

    Mathematica学习笔记 mathematica 使用总结 1 基础知识 1 从1开始编号输入 Line 1 2 函数的另一种表达形式 1 2 3 4 5 6 7 8 MatrixForm 3 跳出死循环 如不小心进入死循环 可以采用
  • 软件设计师---数据库

    数据库 出题形式 概念数据模型 概念数据模型定义 概念数据模型常用术语 结构数据模型 关系模型 真题 三级模式结构 真题 两级映像 真题 关系模型的基本术语 关系 关系模式等 五个码 键 完整性约束 关系模式的定义 关系模式的组成 关系数据
  • 基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(三)

    目录 前言 总体设计 系统整体结构图 系统流程图 运行环境 模块实现 1 数据预处理 2 数据增强 3 模型构建 4 模型训练及保存 1 模型训练 2 模型保存 5 模型评估 相关其它博客 工程源代码下载 其它资料下载 前言 本项目依赖于K
  • 简单洗牌(打乱52个随机生成的数字)

    代码如下 include

随机推荐

  • 操作系统学习(六)进程的基本知识

    一 程序和进程 程序 1 指令序列 2 程序段存放指令序列 数据段存放程序运行中的产生的数据 例如定义的变量 进程 1 程序的一次动态执行 进程的动态性 完成程序的并发执行 2 进程实体 进程映像 3 进程是进程实体的运行过程 是系统进行资
  • 基于卷积神经网络的脱机手写签名识别(Pytorch,Opencv,CNN)

    文章目录 前言 resnet18模型结构 resnet18实现代码 数据集 训练模型 项目结构 前言 最近做了一个手写签名识别的项目 即判断签名的真伪 使用的深度学习框架为Pytorch Opencv等等 数据集中共包含17个人的签名 使用
  • Double保留指定小数位数的五种方法

    方法一 方法一 public void test1 double d 0 3456789 BigDecimal bd new BigDecimal d double test1 bd setScale 2 BigDecimal ROUND
  • hyperledger fabric各版本更新内容

    fabric各版本文档 fabric各版本更新内容 fabric 最新版本 fabric2 5更新内容 fabric2 4更新内容 fabric2 3更新内容 fabric2 2更新内容 fabric2 1更新内容 fabric2 0更新内
  • Ansible中vars(变量)定义

    1 变量使用的原因 playbook的编写是使用yml的语法 虽然该语法规则较为简单 但是 同其他语法相同该语法也有变量 循环等机制的使用 变量的使用就是为了提高我们所写剧本的复用性 当某个参数更改时 直接更改变量的赋值 无需更改剧本中的每
  • 最近大热的 chatGPT 会取代你的工作吗?

    ChatGPT 由于其高效的自然语言处理能力 它最容易取代的领域可能是 文本分类 ChatGPT 可以用作文本分类系统 对文本进行分类 聊天机器人 ChatGPT 可以制作聊天机器人 提供人性化的交互体验 文本生成 ChatGPT 可以生成
  • 小米生态企业强力推荐的开源免费SRM采购管理平台功能介绍

    本文节选自Odoo亚太金牌服务机构 开源智造 所编写的 ERP真的免费不花钱 Odoo应用指南 如需获取完整的知识内容 请至开源智造官网免费获取 感谢网友一键三连 点赞 转发 收藏 您的支持是我们最大的前进动力 概述 采购工作起源于采购请求
  • swagger设置字段required必填

    swagger注解中需要设置请求参数的字段是必须填写的还是非必须的 我们需要添加下面的配置 只需要在对象的字段中增加下面的代码 ApiModelProperty value 自建应用的corpid required true 显示效果如下
  • Vulnhub实战-prime1

    前言 VulnHub 是一个面向信息安全爱好者和专业人士的虚拟机 VM 漏洞测试平台 它提供了一系列特制的漏洞测试虚拟机镜像 供用户通过攻击和漏洞利用的练习来提升自己的安全技能 本次 我们本次测试的是prime1 一 主机发现和端口扫描 查
  • Python 、Pychorm 、 Opencv安装及环境变量的配置--opencv不能调用cv2

    Python Pychorm Opencv安装及环境变量的配置 Python安装及环境变量的配置 1 Python下载安装 官网下载Python安装包 Python官网 https www python org Python在安装时 提示可
  • flex 一行两个_flex 方式的布局你用对了吗?

    对于 CSS 中的 flex 弹性布局 曾经我在公众号里写过 一点点对 flex 布局有关的看法 和 又一次想说 flex 布局挖坑给你 信吗 印象中最深的一个点 是我在文中提到的对于 flex 的这个属性中的三个属性值怎么用的话题 如果你
  • 初等变换法求解线性方程组

    初等变换 通过初等行 列同理 变换把增广矩阵变为简化阶梯型矩阵的线性方程组求解算法 具体步骤 枚举每一列 找到枚举的当前列绝对值最大数的所在行 将该行换到最上面一行 第r行 将该行第一个数 该行第c列元素 消成1 将该行第一个元素 该行第c
  • PCB中如何区分电源线和信号线

    在电路设计中 我们需要区分电源线和信号线 电源线主要负责传输电能和提供稳定的电压给整个电路系统 而信号线则传输各种数据 信息和控制电路 当我们开始画 PCBA 时 通常会采用颜色编码来区分电源线和信号线 以下是一些常见的方法 电源线通常使用
  • 常用邮件客户端软件设置

    文章来源 http service mail qq com cgi bin help subtype 1 id 28 no 371 2 您可以使用支持POP3的客户端软件 例如Foxmail或Outlook 收发您的邮件 请配置您的电子邮件
  • CentOS7搭建httpd服务

    文章目录 httpd 1 httpd安装 使用yum安装 httpd命令 curl命令 编译安装httpd 2 4 2 httpd常用配置 访问控制法则 3 虚拟主机 相同ip不同端口的配置 不同IP相同端口配置 相同IP相同端口不同域名配
  • QT Creator工具介绍及使用

    一 QT的基本概念 QT主要用于图形化界面的开发 QT是基于C 编写的一套界面相关的类库 如进程线程库 网络编程的库 数据库操作的库 文件操作的库等 如何使用这个类库 类库实例化对象 构造函数 gt 学习类库中方法 函数 的使用 gt 后台
  • 今天觉得自己太菜了!!!!

    今天觉得自己太菜了 转载于 https www cnblogs com zhangzheny archive 2007 01 24 629460 html
  • 如何检测tensorflow是否使用CPU还是GPU计算

    输入如下命令 python import tensorflow as tf sess tf Session config tf ConfigProto log device placement True 若包含CPU信息 则使用了CPU 若
  • GBDT 学习

    花絮 最近加班疯掉了 比九九六还要多 不行啊 这个便宜一定要从老板身上占回来 另外不知道朋友们是怎么学习一个新算法的 不过我一般是直接百度很多关于这个算法的博客来看 你会发现有些地方可能相互补充 有的地方可能互相矛盾 这种情况可不少见 总之
  • python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)...

    年轻人 你渴望力量吗 你渴望拥有对象吗 让我们面向对象 重建 家园 吧 一 面向对象的简介 众所周知 python是一门面向对象的编程语言 但是 你知道什么是面向对象吗 在说面向对象之前 我们先来说一说什么是对象 之前的博客有简单涉入 一