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 winsound
            winsound.Beep(1000, 1000)  # 频率和持续时间(毫秒)
        else:
            from playsound import playsound
            playsound('/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 = None
    age = None
    tel = None

    def __init__(self, name, age, tel):
        self.name = name
        self.age = age
        self.tel = tel
        print("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 = name
	self.age = age
	self.tel = tel
	print("Student类创建了一个类对象")

课后练习

在这里插入图片描述

示例程序:

class Student:
    name = None
    age = None
    address = None

    def __init__(self, name, age, address):
        self.name = name
        self.age = age
        self.address = address

my_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 = name
        self.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 = name
        self.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.age

stu = Student("周杰伦", 31)
stu2 = Student("林俊杰", 36)
print(stu1 < stu2)

__le__ 小于等于比较符号方法

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

  • 方法名:__le__
  • 传入参数:other,另一个类对象
  • 返回值:True 或False
  • 内容:自行定义
class Student:
    def __init__(self, name, age):
        self.name = name
        self.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.age

stu = Student("周杰伦", 31)
stu2 = Student("林俊杰", 36)
print(stu1 >= stu2)

__eq__,比较运算符实现方法

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

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

class Student:
    def __init__(self, name, age):
        self.name = name
        self.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.age

stu = Student("周杰伦", 31)
stu2 = Student("林俊杰", 36)
print(stu1 == stu2)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Idea安装插件刷Leetcode

一、下载插件 idea版本2022以下两个插件都可以用来刷Leetcode 二、登录Leetcode 获取token 登录 三、配置 配置1 配置2 Code FileName C$!velocityTool.leftPadZeros($!{question.frontendQuestionId},4)$!velocityTool.replace(${question.title}," ","&qu…

awdawdad

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;C 创作时间 &#xff1a;2024年6月20日 最后&#xff1a; 十分感谢你可以耐着性子把它读完和我可以坚持写到这里&#xff0c;送几句话&#xff0c;对你&#xff0c;也对我&#xff1a; 1.一个冷知识&#xff1a; …

8路编码器脉冲计数器或16路DI高速计数器,Modbus RTU模块 YL69-485/232

特点&#xff1a; ● 编码器解码转换成标准Modbus RTU协议 ● 可用作编码器计数器或者转速测量 ● 支持8个编码器同时计数&#xff0c;可识别正反转 ● 也可以设置作为16路独立DI高速计数器 ● 编码器计数值支持断电自动保存 ● DI输入和电源之间3000V隔离 ● 通过RS-4…

mysql的安装和连接

一.数据库相关概 念 1.数据库 存储数据的仓库,数据是有组织的进行存储,简称DB。 2.数据库管理系统 操纵和管理数据库的大型软件,简称DBM。 3.SQL 操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。简称SQL。 二.市面上流行的数据库 1.ORACLE 2.MySQL …

2024年6月23日 十二生肖 今日运势

小运播报&#xff1a;2024年6月23日&#xff0c;星期日&#xff0c;农历五月十八 &#xff08;甲辰年庚午月戊午日&#xff09;&#xff0c;法定节假日。今天国际奥林匹克日&#xff0c;坚不可摧的意志&#xff0c;披荆斩棘的豪情&#xff0c;永远值得拥有&#xff01; 红榜生…

使用java +paho mqtt编写模拟发布温度及订阅的过程

启动mqtt 服务 创建项目&#xff0c;在项目中添加模块 添加文件夹 添加maven依赖 <dependencies><dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse.paho.client.mqttv3</artifactId><version>1.2.0<…

win11家庭版使用自带的Linux子系统并安装docker【全网整合版】

1. 电脑配置项 开发者选项 设置->系统->开发者选项 启用或关闭windows功能 控制面板->卸载程序->启用或关闭windows功能 勾选适用于Linux的Windows子系统和虚拟机平台并重启电脑(首次勾选选项时电脑提示重启) Hyper-V 关键点&#xff1a;win11家庭版在启动…

JAVA同城服务场馆门店预约系统支持H5小程序APP源码

&#x1f4f1;一键预约&#xff0c;畅享无忧体验&#x1f3e2; &#x1f680;一、开启预约新纪元 在繁忙的都市生活中&#xff0c;我们常常因为时间紧张而错过心仪的门店或场馆服务。然而&#xff0c;有了“门店场馆预约小程序”&#xff0c;这些问题都将迎刃而解。这款小程序…

vue3学习教程第四十节(pinia的用法注意事项解构store)

pinia 主要包括以下五部分&#xff0c;经常用到的是 store、state、getters、actions 以下使用说明&#xff0c;注意事项&#xff0c;仅限于 vue3 setup 语法糖中使用&#xff0c;若使用选项式 API 请直接查看官方文档&#xff1a; 一、前言&#xff1a; pinia 是为了探索 vu…

Python3简单实现与Java的Hutool库SM2的加解密互通

1、背景&#xff1a; 因业务需求&#xff0c;需要与某平台接口对接。平台是Java基于Hutool库实现的SM2加密解密&#xff0c;研究了下SM2的加解密算法&#xff0c;网上找的资料&#xff0c;都是说SM2【椭圆曲线】 公钥长【x,y分量 64字节】&#xff0c;私钥短【32字节】&#x…

网络富集显著性检验NEST(?)

https://doi.org/10.1002/hbm.26714 背景 一般情况下&#xff0c;研究者通过评估统计量较大的脑区与功能网络重叠的情况&#xff0c;或者计算网络的体素占比&#xff0c;来确定行为和功能网络的相关性。NEST能检测行为表型和大脑表型的相关性是否富集在特定的功能网络中。例如下…

Golang | Leetcode Golang题解之第166题分数到小数

题目&#xff1a; 题解&#xff1a; func fractionToDecimal(numerator, denominator int) string {if numerator%denominator 0 {return strconv.Itoa(numerator / denominator)}s : []byte{}if numerator < 0 ! (denominator < 0) {s append(s, -)}// 整数部分numer…

食谱API

在当今追求健康与美味完美结合的时代&#xff0c;获取准确而丰富的食品和营养信息变得至关重要。无论是热衷于探索世界各地美食的烹饪爱好者&#xff0c;还是对自身饮食营养严格把控的健康追求者&#xff0c;都离不开可靠的资源。幸运的是&#xff0c;现在有诸如 TheMealDB 和 …

win10环境配置ollama-ui运行llama3模型

先说我的笔记本电脑配置intel-i7-11390h,4核8处理器&#xff0c;内存16G。显卡NVIDA GeFroce MX450&#xff0c;2G显存&#xff0c;这是一台5000元左右的电脑。 我用它跑roop、sd1.5、ffusion2、ChatTTs还有pythonpytorch的自定义模型&#xff0c;现在用来跑llama3。当然&…

新手(初学者)学R语言第一课,从学正确导入数据开始

初看题目好像我在教你怎么导入数据&#xff0c;不不不&#xff0c;我是在教你正确的导入数据&#xff0c;不是说数据导入R就叫正确导入数据了。本章为新手教程&#xff0c;老手可以跳过。 这个内容早就想写了&#xff0c;今天有点空和大家聊一下。为什么R语言对于新手而言不太友…

【Autoware】Autoware.universe安装过程与问题记录

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Autoware.universe安装过程与问题记录。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下…

基于MYSQL的JAVA初级优化措施

世界是草台班子,这句话视乎很流行! 经历过几家创业公司的项目优化,以及大公司项目. 很多优化非常初级,用心点都能自己找出来! 其实主要原因当初是为了赶进度,能省则省.什么设计啊? 什么性能压测啊. 都省掉吧! 质量都要靠测试人员帮忙找出来,更何况是性能问题呢! 那怕是配齐了…

临时关闭Windows安全中心

在使用WindowsOS是&#xff0c;微软安全中心是我们必不可少的安全防护&#xff0c;但有时我们也会产生想要将其关闭的需求&#xff0c;下面将要介绍如何临时关闭Windows的安全中心 一、打开安全中心、选择“病毒与威胁防护”&#xff0c;点击“管理设置” 之后将其实时保护关闭…

Vue3中的常见组件通信(超详细版)

Vue3中的常见组件通信 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $refs4. 默认…

M12单端I/O预铸法兰插座A-code

M12单端I/O预铸法兰插座A-code概述 M12单端I/O预铸连接器A-code是一种常用于工业自动化领域的连接器件&#xff0c;主要用于传感器和执行器之间的信号传输。它的设计遵循国际标准IEC 61076-2-101&#xff0c;具有良好的防水防尘性能&#xff0c;通常达到IP67的保护等级。M12连…