Python学习打卡:day13

day13

笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了

目录

  • day13
    • 97、初识对象
    • 98、类的成员方法
      • 类的定义和使用
      • 成员变量和成员方法
      • 成员方法的定义语法
    • 99、类和对象
      • 在程序中通过类来描述
      • 基于类创建对象
    • 100、构造方法
      • 课后练习
    • 101、魔术方法
      • \_\_str\_\_字符串方法
      • \_\_lt\_\_小于符号比较方法
      • \_\_le\_\_ 小于等于比较符号方法
      • \_\_eq\_\_,比较运算符实现方法

97、初识对象

使用对象组织数据

  1. 在程序中设计表格,我们称之为:设计类(class)

    class   Student:name = None         # 记录学生的姓名
    
  2. 在程序中打印生产表格,我们称之为:创建对象

    # 2.创建一个对象(类比生活中,打印一张登记表)
    stu_1 = Student()
    
  3. 在程序中填写表格,我们称之为:对象属性赋值

    # 3.对象属性进行赋值(类比生活中:填写表单)
    stu_1.name = "林俊杰"
    

示例程序:

# 1.设计一个类(类比生活:设计一张登记表)
class   Student:name = None         # 记录学生的姓名gender = None       # 记录学生的性别nationality = None  # 记录学生的国籍native_place = None # 记录学生的籍贯age = None          # 记录学生的年龄# 2.创建一个对象(类比生活中,打印一张登记表)
stu_1 = Student()# 3.对象属性进行赋值(类比生活中:填写表单)
stu_1.name = "林俊杰"
stu_1.gender = "男"
stu_1.nationality = "中国"
stu_1.native_place = "山东省"
stu_1.age = 31# 4.获取对象中的记录信息
print(stu_1.name)
print(stu_1.gender)
print(stu_1.nationality)
print(stu_1.native_place)
print(stu_1.age)

98、类的成员方法

类的定义和使用

类的使用语法:
在这里插入图片描述

  • class是关键字,表示要定义类了;
  • 类的属性,即定义在类中的变量(成员变量);
  • 类的行为,即定义在类中的函数(成员方法)。

创建类对象的语法:

在这里插入图片描述

在这里插入图片描述

成员变量和成员方法

class Student:name = None         # 记录学生的姓名def say_hi(self):print(f"hello everyone, my name is {self.name}")stu_1 = Student()
stu_1.name = "zhoujielun"
stu_1.say_hi()

可以看出,类中:

  • 不仅可以定义属性用来记录数据
  • 也可以定义函数,用来记录行为

其中:

  • 类中定义的属性(变量),我们称之为:成员变量
  • 类中定义的行为(函数),我们称之为:成员方法

成员方法的定义语法

在类中定义成员方法和定义函数基本一致,但仍有细微区别:
在这里插入图片描述

可以看到,在方法定义的参数列表中,有一个:self 关键字

self 关键字是成员方法定义的时候,必须填写的。

  • 它用来表示类对象自身的意思;
  • 当我们使用类对象调用方法的是,self 会自动被 python 传入;
  • 在方法内部,想要访问类的成员变量,必须使用 self
def say_hi(self):print(f"hello everyone, my name is {self.name}")

tips

self 关键字,尽管在参数列表中,但是传参的时候可以忽略它。

如:
在这里插入图片描述

可以看到,在传入参数的时候,self 是透明的,可以不用理会它。

示例代码:

"""
演示面向对象类中的成员方法定义和使用
"""# 定义一个带有成员方法的类
class Student:name = None         # 记录学生的姓名def say_hi(self):print(f"hello everyone, my name is {self.name}")def say_hi_2(self, msg):print(f"hello everyone, my name is {self.name}, {msg}")stu_1 = Student()
stu_1.name = "zhoujielun"
stu_1.say_hi()
stu_1.say_hi_2("哎呦不错哦")stu_2 = Student()
stu_2.name = "linjunjie"
stu_2.say_hi()
stu_2.say_hi_2("小伙子我看好你")

99、类和对象

基于类创建对象的语法:对象名 = 类名称()

类只是一种程序内的“设计图纸”,需要基于图纸生产实体(对象),才能正常工作,这种套路,称之为:面向对象编程。

在程序中通过类来描述

在这里插入图片描述

基于类创建对象

在这里插入图片描述

这就是面向对象编程:设计类,基于类创建对象,由对象做具体的工作

示例代码:

"""
演示类和对象的关系:即面向对象的编程套路(思想)
"""
import sys# 设计一个闹钟类
class Clock:id = None       # 序列化price = None    # 价格def ring(self):if sys.platform.startswith('win'):import winsoundwinsound.Beep(1000, 1000)  # 频率和持续时间(毫秒)else:from playsound import playsoundplaysound('/mnt/hgfs/Win_Ubuntu_Share/sound.mp3')  # 替换为你的声音文件路径# 构建 2 个闹钟对象并让其工作
clock1 = Clock()
clock1.id = "003032"
clock1.price = 19.99
print(f"闹钟ID:{clock1.id}, 价格:{clock1.price}")
clock1.ring()clock2 = Clock()
clock2.id = "003033"
clock2.price = 21.99
print(f"闹钟ID:{clock2.id}, 价格:{clock2.price}")
clock2.ring()

100、构造方法

Python类可以使用:init()方法,称之为构造方法。

可以实现:

  • 在创建类对象(构造类)的时候,会自动执行
  • 在创建类对象(构造类)的时候,将传入参数自动传递给__init__方法使用
演示类的构造方法
"""
# 演示使用构造方法对成员变量进行赋值
# 构造方法的名称: __init__class Student:name = Noneage = Nonetel = Nonedef __init__(self, name, age, tel):self.name = nameself.age = ageself.tel = telprint("Student类创建了一个类对象")stu = Student("周杰伦", 31, "18500006666")
print(stu.name)
print(stu.age)
print(stu.tel )

tips

  • 重要的事情说三遍,构造方法名称:__init__ 、__init__、__init__ , 千万不要忘记 init 前后都有2个下划线
  • 构造方法也是成员方法,不要忘记在参数列表中提供:self
  • 在构造方法内定义成员变量,需要 使用self 关键字
def __init__(self, name, age, tel):self.name = nameself.age = ageself.tel = telprint("Student类创建了一个类对象")

课后练习

在这里插入图片描述

示例程序:

class Student:name = Noneage = Noneaddress = Nonedef __init__(self, name, age, address):self.name = nameself.age = ageself.address = addressmy_list = []
# stu = Student()for element in range(1, 4):print(f"当前录入第{element}位学生信息,总共需要录入3位同学信息")name = input("请输入学生的姓名:")age = input("请输入学生的年龄:")address = input("请输入学生的地址:")stu = Student(name, age, address)my_list.append((stu.name, stu.age, stu.address))print(f"学生{element}信息录入完成,信息为:【学生姓名:{stu.name}, 年龄:{stu.age}, 地址:{stu.address}】")print(f"所有信息为:{my_list}")# 结果
当前录入第1位学生信息,总共需要录入3位同学信息
请输入学生的姓名:jack
请输入学生的年龄:22
请输入学生的地址:shanghai
学生1信息录入完成,信息为:【学生姓名:jack, 年龄:22, 地址:shanghai】
当前录入第2位学生信息,总共需要录入3位同学信息
请输入学生的姓名:rose
请输入学生的年龄:23
请输入学生的地址:bejing
学生2信息录入完成,信息为:【学生姓名:rose, 年龄:23, 地址:bejing】
当前录入第3位学生信息,总共需要录入3位同学信息
请输入学生的姓名:麦克
请输入学生的年龄:24
请输入学生的地址:南京
学生3信息录入完成,信息为:【学生姓名:麦克, 年龄:24, 地址:南京】
所有信息为:[('jack', '22', 'shanghai'), ('rose', '23', 'bejing'), ('麦克', '24', '南京')]

101、魔术方法

内置的类方法,各自有各自特殊的功能,这些内置方法我们称之为:魔术方法
在这里插入图片描述

__str__字符串方法

  • 方法名:****str
  • 返回值:字符串
  • 内容:自行定义
class Student:def __init__(self, name, age):self.name = nameself.age = age# __str__魔术方法def __str__(self):return f"Student类对象, name:{self.name}, age:{self.age}"stu1 = Student("周杰伦", 31)
stu2 = Student("林俊杰", 36)
print(stu)
print(str(stu))# 结果
Student类对象, name:周杰伦, age:31
Student类对象, name:周杰伦, age:31

未定义 __str__ 魔术方法时,当类对象需要被转换为字符串之时,会输出如下结果(内存地址):

<__main__.Student object at 0x7f288b7220a0>
<__main__.Student object at 0x7f288b7220a0>

内存地址没有多大作用,我们可以通过__str__方法,控制类转换为字符串的行为。

__lt__小于符号比较方法

直接对2个对象进行比较是不可以的,但是在类中实现 __lt__ 方法,即可同时完成:小于符号 和 大于符号 2种比较。

  • 方法名:****lt
  • 传入参数:other,另一个类对象
  • **返回值:**True False
  • 内容:自行定义

示例代码:

class Student:def __init__(self, name, age):self.name = nameself.age = age# __str__魔术方法def __str__(self):return f"Student类对象, name:{self.name}, age:{self.age}"# __lt__魔术方法def __lt__(self, other):return self.age < other.age# __le__魔术方法def __le__(self, other):return self.age <= other.age# __eq__魔术方法def __eq__(self, other):return self.age == other.agestu = Student("周杰伦", 31)
stu2 = Student("林俊杰", 36)
print(stu1 < stu2)

__le__ 小于等于比较符号方法

魔术方法:__le__可用于:<=、>=两种比较运算符上。

  • 方法名:__le__
  • 传入参数:other,另一个类对象
  • 返回值:True 或False
  • 内容:自行定义
class Student:def __init__(self, name, age):self.name = nameself.age = age# __str__魔术方法def __str__(self):return f"Student类对象, name:{self.name}, age:{self.age}"# __lt__魔术方法def __lt__(self, other):return self.age < other.age# __le__魔术方法def __le__(self, other):return self.age <= other.age# __eq__魔术方法def __eq__(self, other):return self.age == other.agestu = Student("周杰伦", 31)
stu2 = Student("林俊杰", 36)
print(stu1 >= stu2)

__eq__,比较运算符实现方法

不实现__eq__方法,对象之间可以比较,但是是比较内存地址,也即是:不同对象==比较一定是False结果。

实现了__eq__方法,就可以按照自己的想法来决定2个对象是否相等了。

class Student:def __init__(self, name, age):self.name = nameself.age = age# __str__魔术方法def __str__(self):return f"Student类对象, name:{self.name}, age:{self.age}"# __lt__魔术方法def __lt__(self, other):return self.age < other.age# __le__魔术方法def __le__(self, other):return self.age <= other.age# __eq__魔术方法def __eq__(self, other):return self.age == other.agestu = Student("周杰伦", 31)
stu2 = Student("林俊杰", 36)
print(stu1 == stu2)

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

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

相关文章

Javaweb登录校验

登录校验 JWT令牌的相关操作需要添加相关依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>一、摘要 场景&#xff1a;当我们想要访问一个网站时&am…

cherry 笔记三(启动)

cherry启动很简单 app创建完 直接startup()就好了 func main() {app : cherry.Configure("./examples/config/profile-chat.json","chat-master",false,cherry.Cluster,)app.SetSerializer(cserializer.NewJSON())app.Startup() } Configure()--->N…

c++使用std::function/std::bind

1&#xff09;C入门级小知识&#xff0c;分享给将要学习或者正在学习C开发的同学。 2&#xff09;内容属于原创&#xff0c;若转载&#xff0c;请说明出处。 3&#xff09;提供相关问题有偿答疑和支持。 std::function对象是对C中现有的可调用实体的一种类型安全的包裹&…

多路h265监控录放开发-(9)通过拖拽到窗口完成渲染

xcamera_widget.h class XCameraWidget :public QWidget {Q_OBJECTpublic:XCameraWidget(QWidget* p nullptr);//渲染视频void Draw();//123//清理资源,再一个窗口被覆盖后 清理之前窗口生成的资源1~XCameraWidget();//123 private:XDecodeTask* decode_ nullptr;//123XDemu…

Linux平台I2C多字节数据、按页连续读写E2PROM Demo(AT24C16)

1&#xff09;Linux 平台I2C多字节数据按页连续读写E2PROM之AT24C16小知识&#xff0c;分享给将要学习或者正在学习Linux平台I2C多字节按页连续读写E2PROM开发的同学。 2&#xff09;内容属于原创&#xff0c;若转载&#xff0c;请说明出处。 3&#xff09;提供相关问题有偿答…

class中的溢出滑动效果

效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><style>*{margin: 0;padding: 0;}.frame-pages{width: 30%;height: 60px;display: flex;justify…

网络安全-如何设计一个安全的API(安全角度)

目录 API安全概述设计一个安全的API一个基本的API主要代码调用API的一些问题 BasicAuth认证流程主要代码问题 API Key流程主要代码问题 Bearer auth/Token auth流程 Digest Auth流程主要代码问题 JWT Token流程代码问题 Hmac流程主要代码问题 OAuth比较自定义请求签名身份认证&…

测试工程师常见的面试问题及回答建议

说起软件测试近几年的发展&#xff0c;其实已悄无声息地发生了巨大的变化。前几年随着互联网行业的迅猛发展&#xff0c;软件测试人才稀缺&#xff0c;低门槛高薪资促使大批毕业生和转行人员一窝蜂地涌入。而现在&#xff0c;软件测试发展太快&#xff0c;纵观各大招聘网站&…

本科生大厂算法岗实习经验复盘:从投递到面试的底层思维!

目录 投递渠道boss直聘官网邮箱内推 面试准备leetcode八股深挖项目自我介绍mock面试技巧答不出来怎么办coding反问 复盘技术交流群用通俗易懂方式讲解系列 节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面…

猫头虎分享已解决Bug || Null Pointer Exception: `java.lang.NullPointerException`

猫头虎分享已解决Bug || Null Pointer Exception: java.lang.NullPointerException &#x1f63a;&#x1f42f; 关于猫头虎 大家好&#xff0c;我是猫头虎&#xff0c;别名猫头虎博主&#xff0c;擅长的技术领域包括云原生、前端、后端、运维和AI。我的博客主要分享技术教程…

嵌入式学习——数据结构(双向无头有环链表、内核链表、栈)——day48

1. 约瑟夫环问题——双向无头回环链表 1.1 问题描述 给定 ( n ) 个人&#xff08;编号为 ( 1, 2, \ldots, n )&#xff09;&#xff0c;他们围成一个圈。从第一个人开始报数&#xff0c;每报到第 ( k ) 个人时&#xff0c;杀掉这个人&#xff0c;然后从下一个人重新开始报数。…

【Git】 -- Part1 -- 基础操作

1. Git简介 Git 是一个开源的分布式版本控制系统&#xff0c;由 Linus Torvalds 于 2005 年开发&#xff0c;主要用于源代码管理。Git 允许多名开发者共同合作处理同一个项目&#xff0c;跟踪每个文件的修改&#xff0c;并且在必要时回滚到之前的版本。 Linus Torvalds是Linux…

面试突击:深入理解 Java 中的异常

本文已收录于&#xff1a;https://github.com/danmuking/all-in-one&#xff08;持续更新&#xff09; 前言 哈喽&#xff0c;大家好&#xff0c;我是 DanMu。今天想和大家聊聊 Java 中的异常。异常处理是一种重要的概念&#xff0c;因为程序总是会出现各种意料之外的问题&…

通过xml配置实现数据动态导入导出Excel

spring-dj-excel-common.jar 一个可以通过动态配置 xml 建立 Excel 与数据关系现实数据导入导出的 spring 组件包&#xff0c;在 xml 配置文件里&#xff0c;你可以很方便的定义 Excel - sheet 表列头文本与数据表、数据实体属性的对应关系&#xff0c;对于创建 Excel 文件&…

尽管担任社长 宫崎英高95%时间还是在做游戏

宫崎英高表示&#xff0c;虽然他是 FromSoftware 工作室的社长&#xff0c;但他日常工作的绝大部分时间都是在指导游戏开发。因魂系列大获成功而成为 FromSoftware 社长的宫崎英高在接受《卫报》采访时表示&#xff0c;企业高管生活并不是他的兴趣所在。 “我喜欢帮助年轻的监督…

cesium for unity 打包webgl失败,提示不支持

platform webgl is not supported with HDRP use the Vulkan graphics AR instead.

Linux-PXE批量安装

一、部署 PXE 远程安装服务 在大规模的 Linux 应用环境中&#xff0c;如 Web 群集、分布式计算等&#xff0c;服务器往往并不配备光驱设备&#xff0c;在这种情况下&#xff0c;如何为数十乃至上百台服务器裸机快速安装系统呢&#xff1f;传统的 USB光驱、移动硬盘等安装方法显…

双向滑动选择器

插件地址:https://ext.dcloud.net.cn/plugin?id3940 注意: 当改变值是,让滑块自动滑动需要调用: this.$refs.powerSlider.updateValue(that.tempPowerValue[0], that.tempPowerValue[1], false); <view style"width: 90%;margin: 15px"><cj-slider ref…

CAS Apereo 5.3.16 实现单点登录

1.CAS部署 服务端下载地址&#xff1a;cas5.3 1.下载好打开后&#xff0c;复制target/cas/WEB-INF/classes/META-INF/spring.factories target/cas/WEB-INF/classes/services下的Apereo-10000002.json和HTTPSandIMAPS-10000001.json target/cas/WEB-INF/classes下的applicati…

挑战Midjourney,融合近百个SD大模型的通用模型AlbedoBase XL

在SDXL的通用模型中&#xff0c;DreamShaperXL和juggernautXL这2款大模型一直都深受广大AI绘画者的喜爱&#xff0c;不可否认&#xff0c;这2款通用模型在很多方面表现都相当出色。 今天再给大家介绍一款基于SDXL的通用大模型&#xff1a;AlbedoBase XL&#xff0c;作者的目标…