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(对象和类的介绍、定义)
目录 前言: 面向过程和面向对象 类和对象 Python中类的定义 (1)类的定义形式 (2)深层剖析类对象 前言: 感谢各位的一路陪伴,我学习Python也有一个月了,在这一个月里我收获满满…...
天猫淘宝企业服务为中小微企业打造供应链智能协同网络,让采购不再将就!丨爱分析报告
编者按:近日天猫淘宝企业服务&爱分析联合发布《2023中小微企业电商采购白皮书》,为中小微企业采购数字化带来红利。 某水泵企业:线上客户主要是中小微企业,线上业绩遇到瓶颈,如何突破呢?某焊割设备企业…...
基于四信网络摄像机的工业自动化应用
方案背景 随着数控机床被广泛的应用在工业生产中,数控技术发展成为制造业的核心。 鉴于数控机床的复杂性,以及企业人力储备有限,设备的监控和维护必须借助外部力量,而如何实现车间实时监测成了目前迫切解决的问题。 方案需求 ①兼…...
软件测试2
一 web掐断三大核心技术 HTML:负责网页的结构 CSS:负责网页的美化 JS:负责网页的行为 二 工具的使用 改变HBuilder文字的大小: 工具-视觉主题设置-大小22-确定 三 html简介 中文定义:超文本标记语言 新建一个html…...
(二分查找)leetcode162. 寻找峰值
文章目录一、题目1、题目描述2、基础框架3、原题链接二、解题报告1、思路分析2、时间复杂度3、代码详解三、本题小知识一、题目 1、题目描述 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值…...
spring boot 配合element ui vue实现表格的批量删除(前后端详细教学,简单易懂,有手就行)
目录 一.前言: 二. 前端代码: 2.1.element ui组件代码 2.2删除按钮 2.3.data 2.4.methods 三.后端代码: 一.前言: 研究了其他人的博客,找到了一篇有含金量的,进行了部分改写实现前后端分离࿰…...
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 什么是深度学习? 简单来说,深度学习就是一种包括多个隐含层 (越多即为越深)的多层感知机。它通过组合低层特征,形成更为抽象的高层表示,用以描述被识别对象的高级属性类别或特征。 能自生成数据的中…...
在 WIndows 下安装 Apache Tinkerpop (Gremlin)
一、安装 JDK 首先安装 Java JDK,这个去官网下载即可,我下载安装的 JDK19(jdk-19_windows-x64_bin.msi),细节不赘述。 二、去 Tinkerpop 网站下载 Gremlin 网址:https://tinkerpop.apache.org/ 点击下面…...
从软件的角度看待PCI和PCIE(一)
1.最容易访问的设备是什么? 是内存! 要读写内存,知道它的地址就可以了,不需要什么驱动程序; volatile unsigned int *p 0xffff8811; unsigned int val; *p val; val *p;只有内存能这样简单、方便的使用吗…...
DSP_TMS320F28377D_ADC学习笔记
前言 DSP各种模块的使用,基本上就是 GPIO复用配置、相关控制寄存器的配置、中断的配置。本文主要记录本人对ADC模块的学习笔记。TMS320F28377D上面有24路ADC专用IO,这意味着不需要进行GPIO复用配置。 只需要考虑相关控制寄存器和中断的配置。看代码请直…...
springcloud3 Nacos中namespace和group,dataId的联系
一 Namespance和group和dataId的联系 1.1 3者之间的联系 话不多说,上答案,如下图: namespance用于区分部署环境,group和dataId用于逻辑上区分两个目标对象。 二 案例:实现读取注册中心的不同环境下的配置文件 …...
[YOLO] yolo理解博客笔记
YOLO v2和V3 关于设置生成anchorbox,Boundingbox边框回归的过程详细解读 YOLO v2和V3 关于设置生成anchorbox,Boundingbox边框回归的个人理解https://blog.csdn.net/shenkunchang1877/article/details/105648111YOLO v1网络结构计算 Yolov1-pytorch版 …...
清华源pip安装Python第三方包
一、更换PIP源PIP源在国外,速度慢,可以更换为国内源,以下是国内一些常用的PIP源。豆瓣(douban) http://pypi.douban.com/simple/ (推荐)清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/阿里云 http://mirrors.aliyun.com/pypi/simple/中…...
python线程池【ThreadPoolExecutor()】批量获取博客园标题数据
转载:蚂蚁学python 网址:【【2021最新版】Python 并发编程实战,用多线程、多进程、多协程加速程序运行】 https://www.bilibili.com/video/BV1bK411A7tV/?p8&share_sourcecopy_web&vd_sourced0ef3d08fdeef1740bab49cdb3e96467实战案…...
LearnOpenGL-入门-8.坐标系统
本人刚学OpenGL不久且自学,文中定有代码、术语等错误,欢迎指正 我写的项目地址:https://github.com/liujianjie/LearnOpenGLProject LearnOpenGL中文官网:https://learnopengl-cn.github.io/ 文章目录坐标系统概述局部空间世界空…...
windows10使用wsl2安装docker
配环境很麻烦,想利用docker的镜像环境跑一下代码整个安装过程的原理是:windows使用docker,必须先安装一个linux虚拟机,才可运行docker,而采用wsl2安装虚拟机是目前最好的方法第一步 windows安装wsl2控制面板->程序-…...
Javascript的API基本内容(六)
一、正则表达式 1.定义规则 const reg /表达式/ 其中/ /是正则表达式字面量正则表达式也是对象 2.使用正则 test()方法 用来查看正则表达式与指定的字符串是否匹配如果正则表达式与指定的字符串匹配 ,返回true,否则false 3.元字符 比如࿰…...
电压放大器和电流放大器的区别是什么意思
在日常电子实验测试中,很多电子工程师都会使用到电压放大器和电流放大器,但是很多新手工程师却无法区分两者的区别,下面就让安泰电子来为我们讲解电压放大器和电流放大器的区别是什么意思。 一、电压放大器介绍: 电压放大器是一种…...
cast提前!最简单有效的神经网络优化方法,没有之一!
做优化有时候真的很头疼,绞尽脑汁的想怎么做算法等价,怎么把神经网络各层指令流水起来,在确保整网精度的同时,又有高性能。 但有时做了半天,却发现流水根本就流不起来,总是莫名其妙地被卡住。 真的是一顿…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
