程序猿大战Python——面向对象——魔法方法

什么是魔法方法?

==目标:==了解什么是魔法方法?

魔法方法指的是:可以给Python类增加魔力的特殊方法。有两个特点:

(1)总是被双下划线所包围;

(2)在特殊时刻会被自动调用,不需要开发者手动去调用。

魔法方法语法:

__魔法方法名__()

在Python中,常用的魔法方法有:

魔法方法名描述信息
__init__(self [, ...])构造器,当一个对象被初始化创建时,会被自动调用。
__str__(self)输出对象名时,若不想直接输出内存地址值,可重写str()方法。
__del__(self)当一个对象被删除或销毁时,会被自动调用。

==总结:==

(1)魔法方法的前后,总是被()包围着;==A、双下划线==;B、单下划线;

(2)注意:魔法方法会在某些特殊时刻被自动调用。

无参__init__()方法

==目标:==掌握无参__init__()方法的使用。

在Python中,当新创建一个对象时,则会自动触发__init__()魔法方法。

魔法方法名描述信息
__init__(self [, ...])构造器,当一个对象被初始化创建时,会被自动调用。

根据是否给__init__()魔法方法传递参数值,可分为:

(1)无参__init__()方法

(2)有参__init__()方法

无参__init__()方法语法:

class 类名:def __init__(self):代码...

说明:当仅需在类内部使用与初始化属性时,可以使用该方法。

例如,一起来完成:

(1)给小轿车这个对象默认设置颜色和轮胎数为:黑色、3个轮胎;

(2)创建对象后,直接获取属性结果。

# 定义Student类
# class Student:
#     def __init__(self):
#         print("执行了init...")
​
# init
# 创建对象
# stu = Student()  # 创建对象时,会自动调用Init方法
# stu.__init__()
​
# 1.定义类: 默认设置属性
class MyCar:def __init__(self):# 默认设定self.color = "黑色"self.number = 3
​def func(self):print("============================")print(f"颜色:{self.color}")print(f"轮胎数:{self.number}")print("============================")
​
# 2.在类的外部访问属性
my_car = MyCar()
# print(my_car.color)
# print(my_car.number)
​
# 3.类内部访问属性
my_car.func()

==总结:==

(1)当创建对象时,会()执行__init__()方法;A、自动调用;B、不调用;

(2)注意:建议自定义的类中,有一个__init__()魔法方法。

==休息一下,15:40继续上课。==

有参__init__()方法

==目标:==掌握有参__init__()方法的使用。

当想要在创建对象时,就设定属性值时,可以使用有参__init__()方法。语法:

class 类名:def __init__(self, 参数1, 参数2,...):代码...

说明:

(1)不需要给self传递参数值;

(2)传递参数个数的计算公式为【传递参数个数 = 定义方法后的参数总个数 - 1】。

例如,一起来完成:

(1)直接在创建车对象时,初始化设定颜色、轮胎数值;

(2)在类外部直接获取对象属性值。

# 1.定义类、方法
class Car:def __init__(self,color,number):   # 属性名会与传递的参数名名称保持一致self.color = colorself.number = number
​
​
# 2.创建对象
car = Car("黑色",4)
# 3.获取值
print(f"颜色:{car.color}")
print(f"轮胎个数:{car.number}")

==总结:==

(1)__init__()方法可以用来设置属性的默认值;

(2)注意:当要在创建对象时,直接设定属性值,则可以通过有参__init__()方法传递参数值来处理。

__str__()方法

==目标:==掌握__str__()方法的使用。

内存地址值,也称为引用。表现形式有两种:

(1)十进制数 5040624,id()函数

(2)十六进制数 0x45AC6

说明:当直接输出对象名时,默认输出的是对象的内存地址值。

当在类中定义了__str__方法,则获取的是该方法返回的数据结果。

魔法方法名描述信息
__str__(self)输出对象名时,若不想直接输出内存地址值,可重写str()方法。

__str__方法语法:

class 类名:def __str__(self):代码...return 字符串型的结果

说明:必须返回字符串型的结果。

例如,一起来完成:

(1)创建一个有两个参数的小轿车对象,直接输出对象名,观察结果;

(2)思考:在输出小轿车对象名时,如何把颜色、轮胎数显示出来?

# 1.定义类
class Car:def __init__(self,color,number):self.color = colorself.number = number
​def __str__(self):# return "颜色:"+self.colorreturn "颜色:"+self.color+",轮胎数:"+str(self.number)
​
# 2.输出对象名  -内存地址值
car = Car("白色",4)
# print(car)  # <__main__.Car object at 0x000001FBBCA72DF0>
# 3.如何显示
print(car)
# 总结
# 1.当直接输出对象名时,输出内存地址值,则表示没有重写str方法
# 2.当输出对象名不显示内存地址值, 重写了str方法

==总结:==

(1)注意:当没有重写__str__()方法时,输出对象名,则直接输出对象的()。==A、内存地址值==;B、属性名;

__del__()方法

==目标:==了解__del__()方法的使用。

当删除对象时,会自动调用__del__()方法。

魔法方法名描述信息
__del__(self)当一个对象被删除或销毁时,会被自动调用。

__del__()方法语法:

class 类名:def __del__(self):代码...

例如,一起来完成:

(1)定义一个有品牌属性的车类;

(2)创建对象后,输出属性值;

(3)再使用__del__()方法删除对象查看效果;

(4)思考:当不调用【del 对象名】,__del__()方法会自动调用执行吗?

# 1.定义类
class Car:def __init__(self,brand):self.brand = brand
​def __del__(self):print("=========__del__===========")
​
# 2.创建对象
car = Car("BMW")
# 删除 -内存
# del car   # 注释
print(car.brand)
# 3.查看del
# 注意: 为了能更方便的查看del效果, 建议使用 del xx语法

==总结:==

(1)当使用【del 对象名】时,自动调用了__del__()方法;

(2)注意:当程序执行结束时,Python垃圾回收器会自动销毁内存垃圾,此时会自动调用__del__()方法。

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

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

相关文章

MURF3040CTR-ASEMI智能AI应用MURF3040CTR

编辑&#xff1a;ll MURF3040CTR-ASEMI智能AI应用MURF3040CTR 型号&#xff1a;MURF3040CTR 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 恢复时间&#xff1a;35ns 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;30A 最大循环峰值反向电压&#xff08;VR…

CSS详解

盒子模型&#xff08;box-sizing&#xff09; line-height与height CSS选择符和可继承属性 属性选择符&#xff1a; 示例&#xff1a;a[target"_blank"] { text-decoration: none; }&#xff08;选择所有target"_blank"的<a>元素&#xff09; /* 选…

嵌入式Linux驱动开研发流程详细解析

大家好,今天主要给大家分享一下,嵌入式linux中重要的内容详解。 一、驱动概念 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁。 具体任务 读写设备寄存器(实现控制的方式) 完成设备的轮询、中断处理、DMA通信(CPU与外设通信的方式) 进行物理内存向虚拟内存…

[已解决]ImportError: DLL load failed while importing win32api: 找不到指定的程序。

使用pip install pywin32302安装后import找不到win32api 失败尝试 上网找别人的解决方案&#xff0c;大部分解决方案都是通过复制下面两个dll文件到 下面这个文件夹&#xff0c;并且复制到C:\Windows\System32&#xff0c;从而解决问题&#xff0c;但是我没能成功。 解决方…

深度神经网络——什么是小样本学习?

引言 小样本学习是指使用极少量的训练数据来开发人工智能模型的各种算法和技术。小样本学习致力于让人工智能模型在接触相对较少的训练实例后识别和分类新数据。小样本训练与训练机器学习模型的传统方法形成鲜明对比&#xff0c;传统方法通常使用大量训练数据。小样本学习是 主…

【IC验证】UVM实验lab03

1. TLM端口的创建、例化与使用 创建&#xff1a; uvm_get_blocking_port #(fmt_trans) mon_bp_port; 例化&#xff1a; function new(string name "mcdf_refmod", uvm_component parent);super.new(name, parent);fmt_trans new("fmt_trans", this);…

HMI之王 STM32H7S7

还要什么自行车啊 感谢原厂精彩培训和慷慨赠板&#xff01; 以下列示几个关注的点&#xff0c;计划做成系列&#xff0c;随缘更新&#xff0c;尽量填。 0&#xff09;1024*600分辨率配5寸触屏&#xff1b;Type-C with USB 2.0 HS interface, dual‑role‑power 终于不用2根线…

为何人类需重复学习与记忆?人工智能与人类认知机制的融合 —— 生物体AI

零、 AI 与人的认知背景知识 人作为一种生物智能体&#xff0c;学习和记忆的过程往往需要重复与实践。这是因为人的大脑并非一次性就能完美地吸收和储存信息&#xff0c;而是通过反复的认知加工&#xff0c;将短期记忆转化为长期记忆&#xff0c;并通过深度理解、归纳总结以及…

excel数据透视

Excel中&#xff0c;数据透视图&#xff08;PivotChart&#xff09;和数据透视表&#xff08;PivotTable&#xff09;是两个紧密相关的工具&#xff0c;用于分析数据。数据透视表是数据透视图的数据源&#xff0c;也就是说&#xff0c;数据透视图是基于数据透视表中的数据创建的…

区块链媒体发布推广秘籍大揭秘-华媒舍

区块链技术迅猛发展&#xff0c;成为全球瞩目的热门领域。随之而来的是区块链媒体的兴起&#xff0c;成为传播和推广区块链知识、项目和应用的重要平台。本文将揭示区块链媒体发布推广的秘籍&#xff0c;为读者深入了解该领域提供详尽科普介绍。 一、什么是区块链媒体&#xff…

【活动】TSRC反爬虫专项正式启动!

活动时间 即日起 ~ 2024年7月5日 18:00 测试范围&#xff1a;微信公众号、腾讯新闻等 测试域名&#xff1a;mp.weixin.qq.com 微信公众号相关接口 1. 微信公众号文章列表 2. 历史文章 3. 文章详细内容 注&#xff1a;详情报名后公布。反爬虫专项将不定期上线新业务&#xf…

亚马逊测评:从底层硬件到软件控制,全方位打造安全测评环境

在竞争激烈的测评市场中&#xff0c;构建一个稳定高效的模拟环境体系是赢得竞争的关键所在。然而&#xff0c;现有的虚拟环境方案如虚拟机、模拟机、GCS系统、云手机以及VPS服务等不仅费用昂贵&#xff0c;而且面临着在风控严密的平台上如亚马逊难以逃避检测的问题&#xff0c;…

力扣SQL50 每月交易 I 求和 SUM(条件表达式) DATE_FORMAT(日期,指定日期格式)

Problem: 1193. 每月交易 I &#x1f468;‍&#x1f3eb; 参考题解 Code select DATE_FORMAT(trans_date, %Y-%m) AS month,country,count(*) as trans_count,count(if(state approved, 1, NULL)) as approved_count,sum(amount) as trans_total_amount,sum(if(state appr…

Linux的shell语法

Linux的shell脚本 1.概述 shell解释器&#xff0c;介于操作系统内核与用户之间&#xff0c;充当了一个“命令解释器”的角色&#xff0c;负责接收用户输入的操作指令&#xff08;命令&#xff09;并进行解释&#xff0c;将需要执行的操作传递给内核执行&#xff0c;并输出执行…

关于使用绿联 USB-A转RJ45 2.5G网卡提速的解决问题

问题 网络下载速率低 我的自带网卡是 I219v 在嵌入了2.5G网络后一直无法到达1.5G以上。 平均测速300~500M 解决方案 更新了USB的网卡驱动 禁用了 I219-V的驱动。测速即可 USB下载地址 https://download.csdn.net/download/qq_28198181/89468806

库卡机器人减速机维修齿轮磨损故障

一、KUKA机器人减速器齿轮磨损故障的原因 1. 润滑不足&#xff1a;润滑油不足或质量不佳可能导致齿轮磨损。 2. 负载过重&#xff1a;超过库卡机械臂减速器额定负载可能导致齿轮磨损。 3. 操作不当&#xff1a;未按照说明书操作可能导致KUKA机器人减速器齿轮磨损。 4. 维护不足…

替换或重写Tomcat内置的404页面

替换或重写Tomcat内置的404页面 准备一个Tomcat隐藏Tomcat的相关信息纯净版的Tomcat解决Tomcat启动乱码的问题 替换或重写Tomcat内置的404页面创建新的首页和错误页面页面代码如下所示&#xff1a;创建首页index.html创建error_404.html页面创建其他错误页面创建编写web.xml&am…

当Windows台式电脑或笔记本电脑随机关机时,请先从这8个方面检查

序言 你的Windows笔记本电脑或PC是否意外关闭?笔记本电脑电池故障、电源线松动、过热、电源设置错误、驱动程序过时或电脑组件故障等问题都可能是罪魁祸首。如果你对这个问题感到沮丧,试试这些解决方案。 进行一些初步检查 与从电池中获取电力的笔记本电脑不同,台式电脑依…

移动端+PC端应用模式的智慧城管综合执法办案平台源码,案件在线办理、当事人信用管理、文书电子送达、沿街店铺分析

城市管理综合执法管理平台实现执法办案、业务全流程在线办理&#xff0c;依托移动端PC端的“两端”应用模式&#xff0c;保障能够通过信息化手段进行日常的执法办案工作&#xff0c;强化执法监督功能。提供了案件在线办理、当事人信用管理、文书电子送达、沿街店铺分析等功能&a…

VMware vSphere Bitfusion 4.5.4 - 面向 AI 和 ML 应用提供弹性基础架构

VMware vSphere Bitfusion 4.5.4 - 面向 AI 和 ML 应用提供弹性基础架构 请访问原文链接&#xff1a;VMware vSphere Bitfusion 4.5.4 - 面向 AI 和 ML 应用提供弹性基础架构&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org VM…