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版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数