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

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. 打印对象结果;

小结:

  • 在程序中是可以做到和生活中那样,设计表格、生产表格、填写表格的组织形式的;
  • 与程序进行对比:
    1. 在程序中设计表格:设计类(class)
    2. 在程序中打印生产表格:创建对象
    3. 在程序中填写表格:对象属性赋值

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关键字是成员方法定义的时候,必须填写的;
    1. 它用来表示类对象自身的意思;
    2. 当我们使用类对象调用方法时,self会自动被python传入;
    3. 在方法内部,想要访问类的成员变量,必须使用self;

2. 类的行为:

  1. 在定义类行为时,若无传入的形参,则在相对应调用类的方法时,即可不用传递参数;
  2. 在定义类行为时,如果定义了形参,这时候在调用类的方法时,就必须传入对应的实参;
  3. 想要访问成员属性,必须使用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 用生活中的物件来解释对象
  • 就比如闹钟:
    1. 一个闹钟就好比一个对象;
    2. 那么对象的属性就是闹钟的价格,型号、品牌;
    3. 那么闹钟的行为就好比:闹钟响铃;
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()  # 闹钟响铃行为

小结:

  1. 现实世界的事物由什么组成?
    • 属性;
    • 行为;
    • 类也可以包含属性和行为,所以使用类描述现实世界事物是非常合透的;
  2. 类和对象的关系是什么?
    • 类是程序中的“设计图纸”;
    • 对象是基于图纸生产的具体实体;
  3. 什么是面向对象编程?
    • 面向对象编程就是,使用对象进行编程;
    • 即,设计类,基于类创建对象,并使用对象来完成具体的工作;

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 构造方法注意事项
  1. 使用_ init _时,注意前后都有2个下划线;
  2. 构造方法也是成员方法,不用忘记在参数列表中提供:self关键字;
  3. 在构造方法内定义成员变量,需要使用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类内置的方法之一;

    这些内置的类方法,各自有各自特殊的功能,这些内置方法称为魔术方法;

    • 常见的魔术方法:
      1. __init__ :构造方法
      2. __str__ :字符串方法
      3. __lt__ :小于,大于符号比较
      4. __le__ :小于等于,大于等于符号比较
      5. __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 创建类对象的语法&#xff1a;对象名 类名称() 4.2 用生活中的…...

SolidWorks 2016 SP5安装教程

软件介绍 Solidworks软件功能强大&#xff0c;组件繁多。 Solidworks有功能强大、易学易用和技术创新三大特点&#xff0c;这使得SolidWorks 成为领先的、主流的三维CAD解决方案。 SolidWorks 能够提供不同的设计方案、减少设计过程中的错误以及提高产品质量。SolidWorks 不仅…...

为什么高考志愿只选计算机专业?

刚刚高考结束&#xff0c;不知道各位学弟学妹考的怎么样啊&#xff1f; 高考毕竟是对十二年寒窗苦读的评判&#xff0c;也是很多人改变命运的机会。很多同学每天等待出分的过程很煎熬&#xff0c;既吃不好也玩不好&#xff08;os&#xff1a;这种同学还挺多的&#xff09;。 但…...

GPT大模型微调-提高垂直领域回答质量

微调一个大模型并测试微调后的效果是一个很好的学习实践。下面是一个逐步指导,帮助你使用一个较小的预训练大模型进行微调,并测试其效果。我们将使用 Hugging Face 的 Transformers 库和一个较小的预训练模型,如 DistilBERT。这个库非常流行且易于使用。 实现步骤 步骤 1:…...

全网首发-Docker被封后的代理设置教程

最近上交、科大以及阿里的一些docker镜像&#xff0c;好像都因为不可控力导致无法访问。 所以&#xff0c;之前好多正常的一些镜像的打包都会报错&#xff1a; 比如&#xff1a; #1 [internall load build definition from Dockerfile#1transferring dockerfile:972B done#1 D…...

代码随想录算法训练营第五十七天|1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序列

代码随想录算法训练营第五十七天 1143.最长公共子序列 题目链接&#xff1a;1143.最长公共子序列 确定dp数组以及下标的含义&#xff1a;dp[i][j] &#xff1a;以下标i - 1为结尾的text1&#xff0c;和以下标j - 1为结尾的text2&#xff0c;最长重复子数组长度为dp[i][j]确…...

RocketMQ事务性消息

RocketMQ事务性消息是一定能保证消息发送成功的 事务消息发送步骤&#xff1a; &#xff08;1&#xff09;发送方将半事务消息发送至RocketMQ服务端。 &#xff08;2&#xff09;RocketMQ服务端将消息持久化之后&#xff0c;向发送方返回ack确认消息已经发送成功。由于消息为…...

mysql (事物)

一.什么是事物 事物是一组操作的集合&#xff0c;不可分割的工作单位&#xff0c;事物会把所有的操作当作一个整体一起向系统提交或撤销操作请求&#xff0c;就是这些操作要么一起成功要么一起失败。 二.事物操作 &#xff08;这个就是一个理解&#xff09; 1.事务特性 原子性…...

kotlin 中的字符串

一、字符类访问 1、字符串的访问跟js一样&#xff0c;可以使用索引来访问或者直接循环。 fun main() {val a: String "2024"// 方式一&#xff1a;for (item in a) {println(item) // 输出每一个字符}// 方式二&#xff1a;println("${a[0]}, ${a[1]}, ${a[2…...

网站线上模板建设的优缺点

优点&#xff1a; 1.搭建的时间短&#xff0c;在线建站&#xff0c;只需要登录注册然后选择网站模板创建网站即可管理自己的网站后台&#xff0c;就几步操作就可以实现。 2.网站出错率少&#xff0c;因为有很多用户在使用&#xff0c;前期所报出来的问题就已经一一…...

哲学家进餐问题

1.最多允许四个哲学家同时进餐&#xff0c;保证有一个筷子是空闲的&#xff0c;从而保证能有有一个哲学家成功进餐&#xff0c;而不导致死锁 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融合应用

在新一轮互联网信息技术大发展的现今&#xff0c;无人机、大数据、人工智能、物联网等新兴技术在各行各业都处于大爆发的前夜。为了将人工智能方法引入农业生产领域。首先在种植、养护等生产作业环节&#xff0c;逐步摆脱人力依赖&#xff1b;在施肥灌溉环节构建智慧节能系统&a…...

联想测开一面(电话面试)笔试60%

联想测开一面&#xff08;电话面试&#xff09;笔试60% 3.21 无自我介绍 基本问项目&#xff0c;问实习 对python自动化测试了解多少 讲一下python中打包和解包的概念 学校无测试相关课程&#xff0c;平时用什么平台去学习的 计算机底层实现原理简要说说&#xff08;软硬结合&…...

【python】tkinter GUI开发: Button和Entry的应用实战探索

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

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计算年化利率

接了业务需求需要计算年化利率&#xff0c; 公式定义&#xff1a; IRR计算 在计算 IRR 时&#xff0c;我们希望找到一个折现率r&#xff0c;使得净现值&#xff08;NPV&#xff09;为零。NPV 函数定义如下&#xff1a; NPV ∑ t 0 n C t ( 1 r ) t \text{NPV} \sum_{t0}…...

深入理解ChatGPT工作原理

在人工智能领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术的飞速发展让机器能够更加自然和人类进行交流。OpenAI的ChatGPT作为当前最受关注的NLP模型之一&#xff0c;其出色的对话能力引起了业界和学术界的广泛关注。本文将深入探讨ChatGPT的工作原理&#xff0…...

在 Wed 中应用 MyBatis(同时使用MVC架构模式,以及ThreadLocal 事务控制)

1. 在 Wed 中应用 MyBatis&#xff08;同时使用MVC架构模式&#xff0c;以及ThreadLocal 事务控制&#xff09; 文章目录 1. 在 Wed 中应用 MyBatis&#xff08;同时使用MVC架构模式&#xff0c;以及ThreadLocal 事务控制&#xff09;2. 实现步骤&#xff1a;1. 第一步&#xf…...

Elasticsearch index 设置 false,为什么还可以被检索到?

在 Elasticsearch 中&#xff0c;mapping 定义了索引中的字段类型及其处理方式。 近期有球友提问&#xff0c;为什么设置了 index: false 的字段仍能被检索。 本文将详细探讨这个问题&#xff0c;并引入列式存储的概念&#xff0c;帮助大家更好地理解 Elasticsearch 的存储和查…...

169. 多数元素

题目 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3]输出&#xff1a;3 …...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...