当前位置: 首页 > news >正文

Python进阶-----面向对象1.0(对象和类的介绍、定义)

目录

前言:

面向过程和面向对象

类和对象

Python中类的定义

(1)类的定义形式

(2)深层剖析类对象


前言:

      感谢各位的一路陪伴,我学习Python也有一个月了,在这一个月里我收获满满,学到了很多知识,每当我学会了一个新的知识点我会发表一篇博客来表达自己想法和见解,我也写了一篇Python基础学习的专栏(https://blog.csdn.net/m0_73633088/category_12186491.html)  这一阶段的学习也基本告一段落了,而今天我将会开始学习Python中的高级语法,开启Python进阶的新征程,路途漫漫,道路艰险,而我一往无前。

面向过程和面向对象

        编程语言一般分为两种编程范式,一种是面向过程,另一种是面向对象,这两种范式是不相同的语言方法,侧重点是完全不相同的。

面向过程:在前面我们学习的Python基础语法以及C语言,这些都是面向过程的语法,其核心在于过程二字,过程指的是解决问题的步骤,编程的时候先把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按照顺序调用函数,适合简单任务,不需要过多协作。

面向对象:核心就是对象二字, 对象是有属性和方法组成的,编程的时候首先思考的怎么设计这个事物,比如思考造车,我们会思考车怎么设计?,而不是“怎么按照步骤造车的问题”,找轮胎厂制造轮胎,发动机厂制造发动机,发现同时造车的步骤,组成在一起,就完成造车,大大提高了效率。而面向对象即是Python语言的精髓所在。

         那这里就有人会问了:这两种编程范式肯定有高低之分的吧,应该是面向对象比面向过程更加高级。注意力!!!编程范式是没有高低之分的,就好比如文化这一方面,为什么总是有些人崇洋媚外呢?难道中华文化就低人一等了?中国汉服不好看吗?为什么非要去穿和服呢?拜托,中华文化可是有5000年的历史啊,源远流长,博大精深,足以傲视全世界!这里是就是想说明一下编程范式跟文化是一样的实际上没有什么高低之分,只是在不同情况下的适应性不同,千万不要有什么偏见。

类和对象

类:这里就说到类了,好,那什么是类?其实很简单理解,比如说一个物种,或者说某一类人,顾名思义类’是表示某一种事物具有某一共同特征,这就能被分为一类

对象:对象是表示这个类的例子,是具体的实例(具体存在的)

给个例子吧:比如说狗这一类可以分为好多个品种,就以哈士奇和金毛为对象,哈士奇具有什么属性呢?这都不用我说了,二哈名字都摆在那呢;金毛又有什么属性呢?亲人嘛,性格温顺,体贴他人,这些都是这两个对象特有的属性,而它们共有的属性就是:会狗叫、会做坏事、会摇尾巴……等等。很好理解吧!!!

Python中类的定义

前面我们学过字符串的类别是str,整形的类是int、浮点型的类是float……等等,这些都是Python中定义好了的类,我们可以通过这些类去调用类里面的属性和方法,那这里我来教你们怎么去定义类,以及怎么去理解类

(1)类的定义形式

前面我们学过了函数的定义就是def + 函数名字: 下面就是函数体了,其实类也是相似的用关键字class来定义:

#函数的定义
def 函数名(形参):函数体函数名(实参)#类的定义
class 类名:类代码(属性,方法)

类的相关规则:

类名的定义:使用大驼峰命名,(所有单词首字母大写)

定义类之后没有实例对象:执行代码,类中代码执行

定义在类中的变量称为属性,函数称为方

示例1:定义和修改类属性 

class Dog:name='dog' #在类中的变量是属性(attribute)age=5
erha=Dog() #建立实例化对象
print(type(erha))
#输出结果:dog 5
#  <class '__main__.Dog'>

 说明:这里是创建了一个Dog类型,其中有两个属性,name和age,这两个类属性是实例化对象共同拥有的属性,下面我们建立了一个实质化对象erha=Dog() 然后我们就可以输出这个实质化对象的属性,其类型就是Dog 类型,这里还是很好理解的

class Dog:name='dog' #在类中的变量是属性(attribute)age=5
erha=Dog()
print(erha.name,erha.age)
erha.age=3
erha.name='gou'
print(erha.name,erha.age)
#输出结果:
# dog 5
# gou 3

实例化对象的类属性是可以去修改的,直接赋值修改就OK了 

示例2:定义实例方法

1.写法1

class Dog:name='dog'age=5def fun(self):print('这是一直可爱的小狗')
erha=Dog()
print(erha.fun())
#输出结果:这是一直可爱的小狗

2.写法2:,通过类名.方法(实例对象) ---表达

#写法:
class Dog:name='dog'age=5def fun(self):print('这只小狗真可爱')
erha=Dog()
print(Dog.fun(erha)) #我们可以直接把实例参数传入到self
#输出结果:这只小狗真可爱

3. 添加位置参数

class Dog:name='dog'age=5def fun(self,name): #定义参数nameprint(f'这是一直可爱的小狗{name}')
erha=Dog()
print(Dog.fun(erha,'happy'))
#输出结果:这是一直可爱的小狗happy

 注意:

这里定义了一个实例方法为fun,那这里有人就会问,这个不就是函数吗?不是的,在Python中定义在类里面的不叫做函数,而是叫做方法,而定义在类以外的才叫做函数,这里要区分开来。

 说明:

这是一个实例方法,在创建的过程中会自动创建一个self参数,这个参数是表示实例对象的本身,当我们创建好了一个对象之后可以去调用这个方法,以上就是这个方法调用的三种写法

示例3:init初始化方法

  • init初始化方法又叫做实例化方法,魔法方法,构造方法

  • 该方法在初始化(实例)对象时会自动调用,通常情况用于初始化对象的属性

  • 该方式在实例化对象时会自动调用,不需要手动调用

class Dog:animal='dog'def __init__(self,name,age): #name和age是表示实例对象的初始化属性,也是特定属性self.name=name  #这里的self.name是自己定义的,而后面的name是参数self.age=agedef fun(self):print('这只小狗真可爱')
if __name__=='__main__':erha=Dog('Timi',5) #里面的参数必填,否则会报错print(erha.animal,erha.name,erha.age)print(erha.__dict__) #查看实例对象erha 的特定属性
#输出结果:dog Timi 5
#         {'name': 'Timi', 'age': 5}

init 初始化方法是定义并且初始化实例对象的特点属性,我们可以去通过__dict__去查看,然后返回实例对象属性的键值对。

(2)深层剖析类对象

class Dog:name='dog'age=5
print(Dog)
erha=Dog()
print(id(erha))#输出获取地址
#输出结果:<class '__main__.Dog'>
#         2931955054960

这里我们可以看出当我们去调用的时候就要加上() ,这个跟函数是一样的,如果不去调用就会跟第一个输出结果一样,输出这个类的类型,例如:print(int) 这个的输出结果就是<class 'int'>,当我们去调用了这个类之后其实就是已经创建了一个实质化对象,这时候计算机会开辟一段内存空间,从id() 函数获取的地址就可以看出

再看一个例子: 

class Dog:name='dog'age=5
erha=Dog()
print(id(int))
print(id(Dog))
print(id(erha))
#输出结果:140735865654544
#         2504339459136
#         2505947003248

 这里我们可以看出,其实类本身就是有一个空间地址的,而我们去创建一个实例化对象实际上是创建了一个类指针,这个对象erha的类指针指向了Dog 类型,我们可以去通过这个类指针来访问Dog 类型的属性和方法,这也说明了,如果我去定义多个实例对象的话,那么这些实例对象的类指针都会指向定义的类Dog,所以,一个类是具有公用功能的。

class Dog:animal='dog'def __init__(self,name,age):self.name=nameself.age=agedef fun(self,name):print(f'这只{name}真可爱')def recurrence(self,age):i=1sum=1while i<=age:sum*=ii+=1return sum
if __name__=='__main__':erha=Dog('哈士奇',5)Dog.fun(erha,erha.name)print(Dog.recurrence(erha,erha.age))jinmao=Dog('金毛',4)Dog.fun(jinmao,jinmao.name)print(Dog.recurrence(jinmao,jinmao.age))
#输出结果:这只哈士奇真可爱
#         120
#         这只金毛真可爱
#         24

这里可以看出我建立了两个实例对象,其中的方法都是共享的,也就说明类指针的强大所在。

好了,这一期就到这里了,谢谢各位~~~

日常分享壁纸~

 

相关文章:

Python进阶-----面向对象1.0(对象和类的介绍、定义)

目录 前言&#xff1a; 面向过程和面向对象 类和对象 Python中类的定义 &#xff08;1&#xff09;类的定义形式 &#xff08;2&#xff09;深层剖析类对象 前言&#xff1a; 感谢各位的一路陪伴&#xff0c;我学习Python也有一个月了&#xff0c;在这一个月里我收获满满…...

天猫淘宝企业服务为中小微企业打造供应链智能协同网络,让采购不再将就!丨爱分析报告

编者按&#xff1a;近日天猫淘宝企业服务&爱分析联合发布《2023中小微企业电商采购白皮书》&#xff0c;为中小微企业采购数字化带来红利。 某水泵企业&#xff1a;线上客户主要是中小微企业&#xff0c;线上业绩遇到瓶颈&#xff0c;如何突破呢&#xff1f;某焊割设备企业…...

基于四信网络摄像机的工业自动化应用

方案背景 随着数控机床被广泛的应用在工业生产中&#xff0c;数控技术发展成为制造业的核心。 鉴于数控机床的复杂性&#xff0c;以及企业人力储备有限&#xff0c;设备的监控和维护必须借助外部力量&#xff0c;而如何实现车间实时监测成了目前迫切解决的问题。 方案需求 ①兼…...

软件测试2

一 web掐断三大核心技术 HTML&#xff1a;负责网页的结构 CSS&#xff1a;负责网页的美化 JS&#xff1a;负责网页的行为 二 工具的使用 改变HBuilder文字的大小&#xff1a; 工具-视觉主题设置-大小22-确定 三 html简介 中文定义&#xff1a;超文本标记语言 新建一个html…...

(二分查找)leetcode162. 寻找峰值

文章目录一、题目1、题目描述2、基础框架3、原题链接二、解题报告1、思路分析2、时间复杂度3、代码详解三、本题小知识一、题目 1、题目描述 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums&#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值…...

spring boot 配合element ui vue实现表格的批量删除(前后端详细教学,简单易懂,有手就行)

目录 一.前言&#xff1a; 二. 前端代码&#xff1a; 2.1.element ui组件代码 2.2删除按钮 2.3.data 2.4.methods 三.后端代码&#xff1a; 一.前言&#xff1a; 研究了其他人的博客&#xff0c;找到了一篇有含金量的&#xff0c;进行了部分改写实现前后端分离&#xff0…...

hiveSQL开窗函数详解

hive开窗函数 文章目录hive开窗函数1. 开窗函数概述1.1 窗口函数分类1.2 窗口函数和普通聚合函数的区别2. 窗口函数的基本用法2.1 基本用法2.2 设置窗口的方法2.2.1 window_name2.2.2 partition by2.2.3 order by 子句2.2.4 rows指定窗口大小窗口框架2.3 开窗函数中加 order by…...

深度学习基础实例与总结

一、神经网络 1 深度学习 1 什么是深度学习&#xff1f; 简单来说&#xff0c;深度学习就是一种包括多个隐含层 (越多即为越深)的多层感知机。它通过组合低层特征&#xff0c;形成更为抽象的高层表示&#xff0c;用以描述被识别对象的高级属性类别或特征。 能自生成数据的中…...

在 WIndows 下安装 Apache Tinkerpop (Gremlin)

一、安装 JDK 首先安装 Java JDK&#xff0c;这个去官网下载即可&#xff0c;我下载安装的 JDK19&#xff08;jdk-19_windows-x64_bin.msi&#xff09;&#xff0c;细节不赘述。 二、去 Tinkerpop 网站下载 Gremlin 网址&#xff1a;https://tinkerpop.apache.org/ 点击下面…...

从软件的角度看待PCI和PCIE(一)

1.最容易访问的设备是什么&#xff1f; 是内存&#xff01; 要读写内存&#xff0c;知道它的地址就可以了&#xff0c;不需要什么驱动程序&#xff1b; volatile unsigned int *p 0xffff8811; unsigned int val; *p val; val *p;只有内存能这样简单、方便的使用吗&#xf…...

DSP_TMS320F28377D_ADC学习笔记

前言 DSP各种模块的使用&#xff0c;基本上就是 GPIO复用配置、相关控制寄存器的配置、中断的配置。本文主要记录本人对ADC模块的学习笔记。TMS320F28377D上面有24路ADC专用IO&#xff0c;这意味着不需要进行GPIO复用配置。 只需要考虑相关控制寄存器和中断的配置。看代码请直…...

springcloud3 Nacos中namespace和group,dataId的联系

一 Namespance和group和dataId的联系 1.1 3者之间的联系 话不多说&#xff0c;上答案&#xff0c;如下图&#xff1a; namespance用于区分部署环境&#xff0c;group和dataId用于逻辑上区分两个目标对象。 二 案例&#xff1a;实现读取注册中心的不同环境下的配置文件 …...

[YOLO] yolo理解博客笔记

YOLO v2和V3 关于设置生成anchorbox&#xff0c;Boundingbox边框回归的过程详细解读 YOLO v2和V3 关于设置生成anchorbox&#xff0c;Boundingbox边框回归的个人理解https://blog.csdn.net/shenkunchang1877/article/details/105648111YOLO v1网络结构计算 Yolov1-pytorch版 …...

清华源pip安装Python第三方包

一、更换PIP源PIP源在国外&#xff0c;速度慢&#xff0c;可以更换为国内源&#xff0c;以下是国内一些常用的PIP源。豆瓣(douban) http://pypi.douban.com/simple/ (推荐)清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/阿里云 http://mirrors.aliyun.com/pypi/simple/中…...

python线程池【ThreadPoolExecutor()】批量获取博客园标题数据

转载&#xff1a;蚂蚁学python 网址&#xff1a;【【2021最新版】Python 并发编程实战&#xff0c;用多线程、多进程、多协程加速程序运行】 https://www.bilibili.com/video/BV1bK411A7tV/?p8&share_sourcecopy_web&vd_sourced0ef3d08fdeef1740bab49cdb3e96467实战案…...

LearnOpenGL-入门-8.坐标系统

本人刚学OpenGL不久且自学&#xff0c;文中定有代码、术语等错误&#xff0c;欢迎指正 我写的项目地址&#xff1a;https://github.com/liujianjie/LearnOpenGLProject LearnOpenGL中文官网&#xff1a;https://learnopengl-cn.github.io/ 文章目录坐标系统概述局部空间世界空…...

windows10使用wsl2安装docker

配环境很麻烦&#xff0c;想利用docker的镜像环境跑一下代码整个安装过程的原理是&#xff1a;windows使用docker&#xff0c;必须先安装一个linux虚拟机&#xff0c;才可运行docker&#xff0c;而采用wsl2安装虚拟机是目前最好的方法第一步 windows安装wsl2控制面板->程序-…...

Javascript的API基本内容(六)

一、正则表达式 1.定义规则 const reg /表达式/ 其中/ /是正则表达式字面量正则表达式也是对象 2.使用正则 test()方法 用来查看正则表达式与指定的字符串是否匹配如果正则表达式与指定的字符串匹配 &#xff0c;返回true&#xff0c;否则false 3.元字符 比如&#xff0…...

电压放大器和电流放大器的区别是什么意思

在日常电子实验测试中&#xff0c;很多电子工程师都会使用到电压放大器和电流放大器&#xff0c;但是很多新手工程师却无法区分两者的区别&#xff0c;下面就让安泰电子来为我们讲解电压放大器和电流放大器的区别是什么意思。 一、电压放大器介绍&#xff1a; 电压放大器是一种…...

cast提前!最简单有效的神经网络优化方法,没有之一!

做优化有时候真的很头疼&#xff0c;绞尽脑汁的想怎么做算法等价&#xff0c;怎么把神经网络各层指令流水起来&#xff0c;在确保整网精度的同时&#xff0c;又有高性能。 但有时做了半天&#xff0c;却发现流水根本就流不起来&#xff0c;总是莫名其妙地被卡住。 真的是一顿…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...