Python第二语言(十、Python面向对象(上))
目录
1. 标记变量的基础类型
2. 初识对象
2.1 使用对象组织数据
3. 成员变量
3.1 类和类成员的定义
3.2 成员变量和成员方法使用
3.3 成员方法的定义语句
4. 类和对象class Clock: def ring(self):
4.1 创建类对象的语法:对象名 = 类名称()
4.2 用生活中的物件来解释对象
4.3 基于类创建对象
5. 构造方法:__init__()方法
5.1 构造方法
5.2 构造方法注意事项
6. 魔术方法:__init__ 、__str__...
6.1 __str__字符串方法:控制类转换成字符串的行为;
6.2 __lt__小于符号比较方法:对2个对象进行比较;
6.3 __le__小于等于比较符号方法:对2个对象进行比较;
6.4 __eq__,比较运算符实现方法,判断对象的值是否相等;
1. 标记变量的基础类型
方便了解变量的基础类型;
语法:变量: 类型
# 基础数据类型注解
var_1: int = 10
var_2: float = 3.55
var_3: bool = True
var_4: str = "zhangSan"class Student:pass# 类对象类型注解
stu: Student = Student()
2. 初识对象
2.1 使用对象组织数据
1. 在程序中设计表格:设计类(class)
class Student:name = None #记录学生姓名
2. 在程序中打印生产表格:创建对象
# 基于类创建对象
stu_1 = Student()
stu_2 = Student()
3. 在程序中填写表格:对象属性赋值
stu_1.name ="zhangSan" # 为学生1对象赋予名称属性值
stu_2.name ="lisi" # 为学生2对象赋予名称属性值
4. 打印对象结果;

小结:
- 在程序中是可以做到和生活中那样,设计表格、生产表格、填写表格的组织形式的;
- 与程序进行对比:
- 在程序中设计表格:设计类(class)
- 在程序中打印生产表格:创建对象
- 在程序中填写表格:对象属性赋值
3. 成员变量
3.1 类和类成员的定义
- 我们可以使用类去封装属性,并基于类创建出一个个的对象来使用;
- 而类的成员一般都会有:成员变量,成员方法
- 创建类对象的语法:
对象 = 类名称()
class 类名称: # class是关键字,表示定义一个类类的属性 # 即定义在类中的变量(成员变量)类的行为 # 即定义在类中的函数(成员方法)
3.2 成员变量和成员方法使用
- 类中定义的属性(变量)称之为:成员变量;
- 类中定义的行为(函数)称之为:成员方法;
class Student:name = Noneage = Nonedef say_hi(self):print(f"大家好!我是{self.name}") # 2.self.调用成员变量stu = Student()
stu.name = "zhangSan" # 1.成员变量的赋值
stu.say_hi()

3.3 成员方法的定义语句
1. 成员方法定义和self关键字:
- 在类中定义成员方法和定义函数基本一致:
def 方法名(se1f,形参1,.....·,形参N):方法体
- self关键字:self关键字是成员方法定义的时候,必须填写的;
- 它用来表示类对象自身的意思;
- 当我们使用类对象调用方法时,self会自动被python传入;
- 在方法内部,想要访问类的成员变量,必须使用self;
2. 类的行为:
- 在定义类行为时,若无传入的形参,则在相对应调用类的方法时,即可不用传递参数;
- 在定义类行为时,如果定义了形参,这时候在调用类的方法时,就必须传入对应的实参;
- 想要访问成员属性,必须使用self,但是如果是传递的参数,就可以不用,注意,self是必写的关键字,用来调用成员变量;
class Student:name = Noneage = Nonedef say_hi(self):print("大家好!")def say_hi1(self, name):print(f"大家好!我是{name}")stu = Student()
stu.say_hi() # 调用时无需传参
stu.say_hi1("zhangSan") # 调用时按照成员需要传递name实参

4. 类和对象class Clock: def ring(self):
- 概念:类就是一个模板,对象就是实现类的实体;
4.1 创建类对象的语法:对象名 = 类名称()
为什么要创建对象:因为类只是一种程序内的“设计图纸”,需要基于图纸生产实体(对象),才能正常工作,这种方式通常称为:面向对象编程;
4.2 用生活中的物件来解释对象
- 就比如闹钟:
- 一个闹钟就好比一个对象;
- 那么对象的属性就是闹钟的价格,型号、品牌;
- 那么闹钟的行为就好比:闹钟响铃;
4.3 基于类创建对象
winsound类:可以让计算机发出一点声音;
# 设计一个闹钟类
class Clock:price = None # 价格size = None # 型号brand = None # 品牌def ring(self):import winsoundprint("闹钟开始响铃...")winsound.Beep(2000, 1000) # 频率,持续时间# 构建闹钟对象并让其工作,clock就是闹钟的对象
clock = Clock()
clock.price = 10
clock.size = "标准型"
clock.brand = "小米"
print(f"闹钟价格{clock.price}元,型号:{clock.size},品牌:{clock.brand}")
clock.ring() # 闹钟响铃行为

小结:
- 现实世界的事物由什么组成?
- 属性;
- 行为;
- 类也可以包含属性和行为,所以使用类描述现实世界事物是非常合透的;
- 类和对象的关系是什么?
- 类是程序中的“设计图纸”;
- 对象是基于图纸生产的具体实体;
- 什么是面向对象编程?
- 面向对象编程就是,使用对象进行编程;
- 即,设计类,基于类创建对象,并使用对象来完成具体的工作;
5. 构造方法:__init__()方法
- 大致就是一个类,可以直接定义init构造方法,直接省去类的成员属性定义,而直接将成员属性定义在init中,并且在类创建时,会自动执行init构造方法,并将传入的参数自动传递给init方法使用;
5.1 构造方法
上面类的属性可以省略不写,在init中已经声明了;
Python类可以使用:_ init() _方法,称之为构造方法:
可以实现:
- 在创建类对象(构造类)的时候,会自动执行;
- 在创建类对象(构造类)的时候,将传入参数自动传递给init方法使用;
class Student:# name = None# age = None 省略成员属性# tel = Nonedef __init__(self, name, age, tel): # 构建类时传入的参数会自动提供给__init__方法,并在构建类的时候__init__方法会自动执行self.name = nameself.age = ageself.tel = telprint("Stu类创建了一个对象", f"学生名是:{name}")sut = Student("zhangSan", 28, "18300000000")

5.2 构造方法注意事项
- 使用_ init _时,注意前后都有2个下划线;
- 构造方法也是成员方法,不用忘记在参数列表中提供:self关键字;
- 在构造方法内定义成员变量,需要使用self关键字,意思是要成为成员变量,需要用self来表示;
def __init__(self, name, age, tel): # 构建类时传入的参数会自动提供给__init__方法,并在构建类的时候__init__方法会自动执行self.name = nameself.age = ageself.tel = telprint("Stu类创建了一个对象", f"学生名是:{name}")
6. 魔术方法:__init__ 、__str__...
-
概念:
不仅仅只有这几个魔术方法,在python中有大概二三十个;
比如说
__init__就是python类内置的方法之一;这些内置的类方法,各自有各自特殊的功能,这些内置方法称为魔术方法;
- 常见的魔术方法:
__init__:构造方法__str__:字符串方法__lt__:小于,大于符号比较__le__:小于等于,大于等于符号比较__eq__:==符号比较
- 常见的魔术方法:
- 可以结合放在一段代码中案例;
6.1 __str__字符串方法:控制类转换成字符串的行为;
类创建时,自动执行__str__魔术方法;
class Student:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"Student类对象,name={self.name},age={self.age}"student = Student("zhangSan", 28)
print(student)
print(str(student))

6.2 __lt__小于符号比较方法:对2个对象进行比较;
同时__lt__也支持大于符号的判断,但是不支持小于等于或大于等于判断;
class Student:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"Student类对象,name={self.name},age={self.age}"def __lt__(self, other): # 传入参数:other,另一个对象,返回值:True和Falsereturn self.age < other.agestudent = Student("zhangSan", 28)
student1 = Student("zhangSan", 30)
print(student < student1)

6.3 __le__小于等于比较符号方法:对2个对象进行比较;
同时支持大于等于判断;等于符号也可以支持;
在这里两个对象相==判断是否相等是判断两个对象的内存地址是否相等,答案会为False;而比较对象值是否相等要使用__eq__;
class Student:def __init__(self, name, age):self.name = nameself.age = agedef __le__(self, other): # 传入参数:other,另一个对象,返回值:True和Falsereturn self.age <= other.agestudent = Student("zhangSan", 28)
student1 = Student("zhangSan", 30)
print(student <= student1)

6.4 __eq__,比较运算符实现方法,判断对象的值是否相等;
class Student:def __init__(self, name, age):self.name = nameself.age = agedef __eq__(self, other): # 传入参数:other,另一个对象,返回值:True和Falsereturn self.age == other.agestudent = Student("zhangSan", 30)
student1 = Student("zhangSan", 30)
print(student == student1)

相关文章:
Python第二语言(十、Python面向对象(上))
目录 1. 标记变量的基础类型 2. 初识对象 2.1 使用对象组织数据 3. 成员变量 3.1 类和类成员的定义 3.2 成员变量和成员方法使用 3.3 成员方法的定义语句 4. 类和对象class Clock: def ring(self): 4.1 创建类对象的语法:对象名 类名称() 4.2 用生活中的…...
SolidWorks 2016 SP5安装教程
软件介绍 Solidworks软件功能强大,组件繁多。 Solidworks有功能强大、易学易用和技术创新三大特点,这使得SolidWorks 成为领先的、主流的三维CAD解决方案。 SolidWorks 能够提供不同的设计方案、减少设计过程中的错误以及提高产品质量。SolidWorks 不仅…...
为什么高考志愿只选计算机专业?
刚刚高考结束,不知道各位学弟学妹考的怎么样啊? 高考毕竟是对十二年寒窗苦读的评判,也是很多人改变命运的机会。很多同学每天等待出分的过程很煎熬,既吃不好也玩不好(os:这种同学还挺多的)。 但…...
GPT大模型微调-提高垂直领域回答质量
微调一个大模型并测试微调后的效果是一个很好的学习实践。下面是一个逐步指导,帮助你使用一个较小的预训练大模型进行微调,并测试其效果。我们将使用 Hugging Face 的 Transformers 库和一个较小的预训练模型,如 DistilBERT。这个库非常流行且易于使用。 实现步骤 步骤 1:…...
全网首发-Docker被封后的代理设置教程
最近上交、科大以及阿里的一些docker镜像,好像都因为不可控力导致无法访问。 所以,之前好多正常的一些镜像的打包都会报错: 比如: #1 [internall load build definition from Dockerfile#1transferring dockerfile:972B done#1 D…...
代码随想录算法训练营第五十七天|1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序列
代码随想录算法训练营第五十七天 1143.最长公共子序列 题目链接:1143.最长公共子序列 确定dp数组以及下标的含义:dp[i][j] :以下标i - 1为结尾的text1,和以下标j - 1为结尾的text2,最长重复子数组长度为dp[i][j]确…...
RocketMQ事务性消息
RocketMQ事务性消息是一定能保证消息发送成功的 事务消息发送步骤: (1)发送方将半事务消息发送至RocketMQ服务端。 (2)RocketMQ服务端将消息持久化之后,向发送方返回ack确认消息已经发送成功。由于消息为…...
mysql (事物)
一.什么是事物 事物是一组操作的集合,不可分割的工作单位,事物会把所有的操作当作一个整体一起向系统提交或撤销操作请求,就是这些操作要么一起成功要么一起失败。 二.事物操作 (这个就是一个理解) 1.事务特性 原子性…...
kotlin 中的字符串
一、字符类访问 1、字符串的访问跟js一样,可以使用索引来访问或者直接循环。 fun main() {val a: String "2024"// 方式一:for (item in a) {println(item) // 输出每一个字符}// 方式二:println("${a[0]}, ${a[1]}, ${a[2…...
网站线上模板建设的优缺点
优点: 1.搭建的时间短,在线建站,只需要登录注册然后选择网站模板创建网站即可管理自己的网站后台,就几步操作就可以实现。 2.网站出错率少,因为有很多用户在使用,前期所报出来的问题就已经一一…...
哲学家进餐问题
1.最多允许四个哲学家同时进餐,保证有一个筷子是空闲的,从而保证能有有一个哲学家成功进餐,而不导致死锁 semaphore chopstick[5] {1, 1, 1, 1, 1}, mutex4; Pi(){do{think...P(mutex);P(chopstick[i]);P(chopstick[(i1)%5);eat...V(mutex)…...
无人机遥感在农林信息提取中的实现方法与GIS融合应用
在新一轮互联网信息技术大发展的现今,无人机、大数据、人工智能、物联网等新兴技术在各行各业都处于大爆发的前夜。为了将人工智能方法引入农业生产领域。首先在种植、养护等生产作业环节,逐步摆脱人力依赖;在施肥灌溉环节构建智慧节能系统&a…...
联想测开一面(电话面试)笔试60%
联想测开一面(电话面试)笔试60% 3.21 无自我介绍 基本问项目,问实习 对python自动化测试了解多少 讲一下python中打包和解包的概念 学校无测试相关课程,平时用什么平台去学习的 计算机底层实现原理简要说说(软硬结合&…...
【python】tkinter GUI开发: Button和Entry的应用实战探索
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
sm2证书生成(openssl3.0)
1、下载安装包 https://www.openssl.org/source/openssl-3.0.14.tar.gz 2、解压到指定位置 /appserver/openssl-3.0.14 3、安装依赖包 yum -y install gcc perl make zlib-devel perl-CPAN 4、编译 ./config shared --prefix/appserver/SM make depend make make install 5…...
java计算年化利率
接了业务需求需要计算年化利率, 公式定义: IRR计算 在计算 IRR 时,我们希望找到一个折现率r,使得净现值(NPV)为零。NPV 函数定义如下: NPV ∑ t 0 n C t ( 1 r ) t \text{NPV} \sum_{t0}…...
深入理解ChatGPT工作原理
在人工智能领域,自然语言处理(NLP)技术的飞速发展让机器能够更加自然和人类进行交流。OpenAI的ChatGPT作为当前最受关注的NLP模型之一,其出色的对话能力引起了业界和学术界的广泛关注。本文将深入探讨ChatGPT的工作原理࿰…...
在 Wed 中应用 MyBatis(同时使用MVC架构模式,以及ThreadLocal 事务控制)
1. 在 Wed 中应用 MyBatis(同时使用MVC架构模式,以及ThreadLocal 事务控制) 文章目录 1. 在 Wed 中应用 MyBatis(同时使用MVC架构模式,以及ThreadLocal 事务控制)2. 实现步骤:1. 第一步…...
Elasticsearch index 设置 false,为什么还可以被检索到?
在 Elasticsearch 中,mapping 定义了索引中的字段类型及其处理方式。 近期有球友提问,为什么设置了 index: false 的字段仍能被检索。 本文将详细探讨这个问题,并引入列式存储的概念,帮助大家更好地理解 Elasticsearch 的存储和查…...
169. 多数元素
题目 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3]输出:3 …...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
