Python学习打卡:day13

2024-06-23 08:04
文章标签 python 学习 打卡 day13

本文主要是介绍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)

这篇关于Python学习打卡:day13的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1086593

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统