程序猿大战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 = color
        self.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 = color
        self.number = number
​
    def __str__(self):
        # return "颜色:"+self.color
        return "颜色:"+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__()方法。

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

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

相关文章

MySQL进阶——视图

目录 1基本语法 1.1创建 1.2 查询 1.3 修改 1.4 删除 2 检查选项 2.1 级联CASCADED 2.2本地LOCAL 3 更新及作用 3.1视图的更新条件 3.2视图的作用 4视图案例 1基本语法 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&…

YYU-5/80-260mm型钢筋残余变形测试仪 电子引伸计

YYU-5/80-260mm型钢筋接头专用引伸计&#xff0c;是按照《JGJ 107 2010 钢筋技术连接技术规程》的技术要求设计的&#xff0c;专门用于测试钢筋接头残余变形的双向平均引伸计&#xff0c;其标距可以根据钢筋直径要求进行调整。 完全符合《JGJ 107 2010 钢筋技术连接技术规程》…

Java 超详细实现导入导出 (包含时间转换问题和样式)

序言 工作中遇到了导入导出问题&#xff0c;并且出现了导入或导出Excel时间格式变为数字的问题。通过学习解决实现了这些功能&#xff0c;记录总结分享给大家。本文将详细介绍如何使用 Java 编程语言和 Apache POI 库来实现这些功能。我们将通过一个示例项目演示如何从数据库中…

C语言| 数组倒置II

数组倒置第二种方法&#xff1a;直接在数组内进行倒置 第一个元素和最后一个元素交换&#xff0c; 第二个元素和倒数第二个元素交换 第三个元素和倒数第三个元素交换...... 数组元素个数为偶数&#xff0c;每个元素都能交换一次&#xff1b; 数组元素个数为奇数&#xff0c;最…

这次,彻底理解 JavaScript 的执行机制

无论你是 JavaScript 的初学者还是专家&#xff0c;无论是为了求职面试还是日常开发工作&#xff0c;我们经常会遇到这样的情况&#xff1a;给出几行代码&#xff0c;我们需要知道它们的输出内容和顺序。由于 JavaScript 是一种单线程语言&#xff0c;我们可以得出以下结论&…

南昌代理记账服务,打造专业财务管理团队

随着企业的发展和规模不断扩大&#xff0c;财务管理也变得越来越重要&#xff0c;而代理记账作为一种专业的财务管理服务&#xff0c;正逐步成为中小企业发展的必要条件之一&#xff0c;南昌作为江西省的省会城市&#xff0c;拥有一批优秀的会计服务机构&#xff0c;为各类企业…

基于Java学生选课管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

【启明智显产品分享】工业级HMI芯片——Model3,不止是速度,USB\CAN\8路串口

一、引言 Model3作为一款工业级HMI芯片&#xff0c;其性能卓越且功能全面。本文将从多个角度深入介绍Model3芯片&#xff0c;以展示其不仅仅是速度的代表。 二、Model3核心特性介绍 Model3工业级跨界MCU是一款国产自主的基于RISC-V架构的高性能芯片&#xff0c;内置平头哥E…

你只是重新发现了一些东西

指北君关于另外一条思维路径的发现。 "自以为是"的顿悟时刻 有很多时候&#xff0c;我会"自以为是"的发现/发明一些东西。这种"自以为是"的时刻通常还带有一些骄傲自豪的情绪。这种感觉特别像古希腊博学家阿基米德 在苦思冥想如何测量不规则物体…

windows使用curl命令出现乱码的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

deepin 加入甲辰计划,共建 RISC-V 繁荣生态

内容来源&#xff1a;deepin&#xff08;深度&#xff09;社区 今日&#xff0c;deepin(深度)社区宣布正式加入甲辰计划&#xff0c;致力于在下一个丙辰年&#xff08;2036龙年&#xff09;之前&#xff0c;基于RISC-V实现从数据中心到桌面办公、从移动穿戴到智能物联网全信息产…

通俗解释resultType和resultMap的区别

【 1 对于单表而言&#xff1a; 注&#xff1a;以下都是摘抄过来的&#xff0c;做了让自己更能理解的版本 如果数据库返回结果的列名和要封装的实体的属性名完全一致的话用 resultType 属性 如果数据库返回结果的列名&#xff08;起了别名&#xff09;和要封装的实体的属性名…

Android使用MPAndroidChart 绘制折线图

效果图&#xff1a; 1.导入依赖 1.1在项目根目录下的build.gradle文件中添加代码&#xff08;注意不是app下的build.gradle&#xff09;&#xff1a; maven { url https://jitpack.io } 1.2在app下的build.gradle中的依赖下添加&#xff1a; implementation com.github.PhilJa…

STM32单片机USART串口收发数据包

文章目录 1. 串口通信 1.1 串口初始化 1.2 库函数 2. 串口收发HEX数据包 2.1 Serial.c 2.2 Serial.h 2.3 main.c 3. 串口收发文本数据包 3.1 Serial.c 3.2 Serial.h 3.3 main.c​​​​​​​ 1. 串口通信 对于串口通信的详细​​​​​​​解析可以看下面这篇文章…

生产实习Day7 ---- Hive介绍

文章目录 概要整体架构流程Hive数据库操作建表语法表分类 概要 Hive是基于Hadoop的数据仓库工具。可以用于存储在Hadoop集群中的HDFS文件数据集进行数据整理、特殊查询和分析处理。Hive提供了类似于关系型数据库SQL语言的HiveQL工具&#xff0c;通过HQL&#xff08;HiveQL&…

用VPS部署聊天机器人有哪些优势?

VPS足以帮助您将人工智能 (AI) 的功能无缝融入聊天机器人并增强客户支持。聊天机器人已迅速成为改善用户体验的首选解决方案&#xff0c;因为它们全天候在线且可编程回答各种问题。 聊天机器人在客户支持方面的作用不容置疑。但所有出色的解决方案都需要出色的网络托管。 VPS…

从零到发布:npm插件包终极指南

在JavaScript和Node.js的生态系统中&#xff0c;npm&#xff08;Node Package Manager&#xff09;是最重要的包管理工具之一。通过npm&#xff0c;开发者可以共享代码、复用他人的工作成果以及协作开发。本指南将详细介绍如何通过npm发布自己的插件包&#xff0c;以便其他开发…

力扣372. 超级次方

Problem: 372. 超级次方 文章目录 题目描述思路复杂度Code 题目描述 思路 1.处理数组指数&#xff1a;如下图可以将其转换为一个递归的操作 2.处理 mod 运算:对于模运算我们有公式&#xff1a; ( a b ) % k ( a % k ) ( b % k ) % k (a \times b) \% k (a \% k) \times (b…

如何利用数据仓库进行业务分析:一名大数据工程师的视角

在大数据时代&#xff0c;数据的有效利用对企业的成功至关重要。 本文将基于上面的流程图&#xff0c;详细介绍如何利用数据仓库进行业务分析&#xff0c;并提供实际的例子和代码演示&#xff0c;以帮助读者更好地理解和应用相关技术。 数据仓库的基本流程 上图展示了一个典…

PointCloudLib 点云边缘点提取 C++版本

0.实现效果 1.算法原理 PCL(Point Cloud Library)中获取点云边界的算法主要基于点云数据的几何特征和法向量信息。以下是对该算法的详细解释,按照清晰的格式进行归纳: 算法概述 PCL中的点云边界提取算法主要用于从3D点云数据中识别并提取出位于物体边界上的点。这些边界…