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

news2024/9/20 1:09:49

目录

前言:

面向过程和面向对象

类和对象

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=5
    def fun(self):
        print('这是一直可爱的小狗')
erha=Dog()
print(erha.fun())
#输出结果:这是一直可爱的小狗

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

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

3. 添加位置参数

class Dog:
    name='dog'
    age=5
    def fun(self,name): #定义参数name
        print(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=age
    def 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=name
        self.age=age
    def fun(self,name):
        print(f'这只{name}真可爱')
    def recurrence(self,age):
        i=1
        sum=1
        while i<=age:
            sum*=i
            i+=1
        return 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

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

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

日常分享壁纸~

 

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

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

相关文章

理解Spring中的依赖注入和控制反转

依赖注入&#xff08;Dependency Injection&#xff09;是一种面向对象编程的设计模式&#xff0c;用于解决对象之间的依赖关系。它的基本思想是将对象的创建和管理工作交给容器来完成&#xff0c;而不是在应用程序中手动创建和管理对象&#xff0c;从而达到松耦合、易维护、易…

华为OD机试题【最差产品奖】用 C++ 编码,速通 (2023.Q1)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明最差产…

【项目精选】 javaEE采购管理系统(论文+视频+源码)

点击下载源码 本系统是一个独立的系统&#xff0c;用来解决企业采购信息的管理问题。采用JSP技术构建了一个 有效而且实用的企业采购信息管理平台&#xff0c;目的是为高效地完成对企业采购信息的管理。经过 对课题的深入分析&#xff0c;采购系统需实现以下功能模块&#xff1…

中睿天下当选信通院网络安全卓越合作伙伴

2月23日&#xff0c;2023年中国网络和数据安全产业高峰论坛—网络安全技术创新赋能产业发展分论坛在四川成都成功召开&#xff0c;分论坛以“技术创新、场景赋能、实效验证”为主题&#xff0c;由工业和信息化部网络安全管理局指导&#xff0c;中国信息通信研究院主办&#xff…

kind kubernetes 集群内如何通过 helm 部署定制化 Prometheus-Operator?

文章目录1. Prometheus 简介2. Prometheus 优势3. Prometheus 架构图4. Prometheus-Operator 简介5. Prometheus-Operator 架构图6. 环境准备7. Kind 部署 Kubernetes7.1 安装 Ingress-nginx 组件7.2 安装 Metric Server 组件8. helm 快速安装 Prometheus-Operator9. 定制 Prom…

洗地机哪个品牌最好用?家用洗地机十大名牌

这几年清洁类的小家电非常热门&#xff0c;无线吸尘器、扫地机器人、扫拖一体机、洗地机和擦窗机器人层出不穷&#xff0c;各个品牌百花齐放。这些清洁电器&#xff0c;确实为家庭卫生清洁带来了很大的便捷。但要把这些产品一次性买齐是一笔不小的开销&#xff0c;而且需要收纳…

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

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

助力Koordinator云原生单机混部,龙蜥混部技术提升CPU利用率达60%|龙蜥技术

文/OpenAnolis Kernel SIG01什么是 CPU 混部CPU 混部是指将不同类型的业务部署到同一台机器上运行&#xff0c;让它们共享机器上的 CPU 资源以提升 CPU 利用率&#xff0c;从而降低机器的采购和运营成本。但是&#xff0c;对于有些类型的任务来说&#xff0c;它们对延时非常的敏…

光流分析 Optical Flow Lucas-Kanade 算法 DOF Dense Optical Flow

光流跟踪算法对车位进行跟踪 概念 光流是空间运动物体在观察成像平面上的像素运动的瞬时速度&#xff0c;是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系&#xff0c;从而计算出相邻帧之间物体的运动信息的一种方法。 一…

王道计算机网络课代表 - 考研计算机 第二章 物理层 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 计算机网络 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “物理层” 章节知识点总结的十分全面&#xff0c;涵括了《计算机网络》课程里的全…

ARM LDREX/STREX指令以及独占监控器详解

一、目的Linux驱动开发中有一个特别重要的知识点必须掌握&#xff0c;即并发、竞态以及同步。什么是并发&#xff1f;多个执行单元&#xff08;进程、线程、中断&#xff09;同时对一个共享资源的进行访问&#xff1b;此处的共享资源可以是外设、内存或者软件层面的全局变量静态…

Linux服务器磁盘分区、挂载、卸载及报错处理

整体操作是&#xff1a;先对磁盘进行格式化&#xff0c;格式化后挂载到需要的挂载点&#xff0c;最后添加分区启动表&#xff0c;以便下次系统启动时自动挂载。一、linux分区1、Linux来说wulun有几个分区&#xff0c;分给哪一目录使用&#xff0c;他归根结底只有一个根目录&…

计算机操作系统第一章

操作系统引论1.1操作系统的目标和作用定义&#xff1a;操作系统是控制管理计算机系统的硬软件&#xff0c;分配调度资源的系统软件。目标&#xff1a;方便性&#xff0c;有效性&#xff08;提高系统资源的利用率、提高系统的吞吐量&#xff09;&#xff0c;可扩充性&#xff0c…

小红书达人怎么找?保姆级教程来了~

在小红书推广营销中&#xff0c;寻找优质的达人是最头疼的事&#xff0c;许多品牌往往会根据简单的小红书排名来直接进行判断认定&#xff0c;其实在挑选小红书达人时有许多要注意的点&#xff0c;接下来和小编一起根据小红书数据分析工具来筛选合适、优质的达人。 千瓜数据—…

蓝桥杯入门即劝退(二十四)重复的子字符串(被秒杀)

欢迎关注点赞评论&#xff0c;共同学习&#xff0c;共同进步&#xff01; ------持续更新蓝桥杯入门系列算法实例-------- 如果你也喜欢Java和算法&#xff0c;欢迎订阅专栏共同学习交流&#xff01; 你的点赞、关注、评论、是我创作的动力&#xff01; -------希望我的文章…

浅谈MySQL主从复制

目录 1.MySQL主从复制是什么 2.MySQL主从复制的意义 3.MySQL主从复制原理 4.数据同步一致性问题 5.实现方式 1.MySQL主从复制是什么 MySQL主从复制就是指数据可以从一台MySQL的主节点复制到一个或多个从节点。 MySQL默认采用异步复制方式&#xff0c;这样从节点不用一直访…

【博学谷学习记录】超强总结,用心分享丨人工智能 Python基础 个人学习总结之列表排序

目录前言简述list.sort()语法返回值实例无参参数key参数reversesorted()语法返回值实例无参参数key参数reverseoperator.itemgetter功能简述实例List.sort与sored区别sorted原理&#xff1a;Timsort算法扩展list原理数据结构心得前言 经过一周的学习&#xff0c;对Python基础部…

嵌入式入门必看!调试工具安装——基于 AM64x核心板

本章节内容是为评估板串口安装USB转串口驱动程序。驱动适用于CH340、CH341等USB转串口芯片。 USB转串口驱动安装 适用安装环境:Windows 7 64bit、Windows 10 64bit。 本文测试板卡为创龙科技SOM-TL64x核心板,它是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 + 单/四核Cort…

DP(4)--区间DP

将n(1≤n≤200)堆石子绕圆形操场摆放&#xff0c;现要将石子有次序地合并成一堆。 规定每次只能选相邻的两堆石子合并成新的一堆&#xff0c;并将新的一堆的石子数&#xff0c;记为该次合并的得分。 (1)选择一种合并石子的方案&#xff0c;使得做n-1次合并&#xff0c;得分的总…

比特数据结构与算法(第四章_下)二叉树的遍历

本章将会详细讲解二叉树遍历的四种方式&#xff0c;分别为前序遍历、中序遍历、后续遍历和层序遍历。在学习遍历之前&#xff0c;会先带大家回顾一下二叉树的基本概念。学习二叉树的基本操作前&#xff0c;需要先创建一颗二叉树&#xff0c;然后才能学习其相关的基本操作&#…