Python---魔术方法

1、什么是魔术方法

在Python中,__xxx__()的函数叫做魔法方法,指的是具有特殊功能的函数。

2、__init__()方法(初始化方法或构造方法)

思考:人的姓名、年龄等信息都是与生俱来的属性,可不可以在生产过程中就赋予这些属性呢?

答:可以,使用__init__() 方法,其作用:实例化对象时,连带其中的参数,会一并传给__init__函数自动并执行它。__init__()函数的参数列表会在开头多出一项,它永远指代新建的那个实例对象,Python语法要求这个参数必须要有,名称为self。


# 1、定义一个类
class Person():
    # 初始化实例对象属性
    def __init__(self, name, age):
        # 赋予name属性、age属性给实例化对象本身
        # self.实例化对象属性 = 参数
        self.name = name
        self.age = age

# 2、实例化对象并传入初始化属性值
p1 = Person('孙悟空', 500)
# 3、调用p1对象自身属性name与age
print(p1.name)
print(p1.age)


① __init__()方法,在创建一个对象时默认被调用,不需要手动调用

② __init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象

引用传递过去。

3、__str__()方法

当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了__str__方法,那么就会打印从在这个方法中 return 的数据。

没有使用__str__()方法的类:


# 1、定义一个类
class Car():
    # 首先定义一个__init__方法,用于初始化实例对象属性
    def __init__(self, brand, model, color):
        self.brand = brand
        self.model = model
        self.color = color

    # 定义一个__str__内置魔术方法,用于输出小汽车的相关信息
    def __str__(self):
        return f'汽车品牌:{self.brand},汽车型号:{self.model},汽车颜色:{self.color}'

# 2、实例化对象c1
c1 = Car('奔驰', 'S600', '黑色')
print(c1)


__str__这个魔术方法是在类的外部,使用print(对象)时,自动被调用的

② 在类的内部定义__str__方法时,必须使用return返回一个字符串类型的数据

4、__del__()方法(删除方法或析构方法)

当删除对象时,python解释器也会默认调用__del__()方法。


class Person():
    # 构造函数__init__
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    # 析构方法__del__
    def __del__(self):
        print(f'{self}对象已经被删除')

# 实例化对象
p1 = Person('白骨精', 100)
# 删除对象p1
del p1


__del__()方法在使用过程中,比较简单,但是其在实际开发中,有何作用呢?

答:主要用于关闭文件操作、关闭数据库连接等等。

5、总结

提到魔术方法:① 这个方法在什么情况下被触发 ② 这个方法有什么实际的作用

__init__():初始化方法或者称之为“构造函数”,在对象初始化时执行,其主要作用就是在对象初始化时,对对象进行初始化操作(如赋予属性)

__str__():对象字符串方法,当我们在类的外部,使用print方法输出对象时被触发,其主要功能就是对对象进行打印输出操作,要求方法必须使用return返回字符串格式的数据。

__del__():删除方法或者称之为“析构方法”,在对象被del删除时触发,其主要作用就是适用于关闭文件、关闭数据库连接等等。

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

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

相关文章

【工作生活】汽车电子嵌入式开发简介

目录 1. 目标 2. 要分享什么 3.1 行业知识 3.1.1车载行业知识: 3.1.2项目: 3.1.3开发测试工具: 3.2 硬件平台 3.3 基础知识 3.4 工作生活 3. 我们是谁 1. 目标 随着新能源汽车的快速崛起,汽车电子行业开始快速发展&…

【矩阵】54.螺旋矩阵(顺时针打印矩形元素)

题目 class Solution {public List<Integer> spiralOrder(int[][] matrix) {int m matrix.length, n matrix[0].length;int leftUpM 0, leftUpN 0, rightDownM m - 1, rightDownN n - 1;List<Integer> res new ArrayList<>();while (leftUpM < ri…

掌控安全 暖冬杯 CTF Writeup By AheadSec

本来结束时发到了学校AheadSec的群里面了的&#xff0c;觉得这比赛没啥好外发WP的&#xff0c;但是有些师傅来问了&#xff0c;所以还是发一下吧。 文章目录 Web签到&#xff1a;又一个计算题计算器PHP反序列化又一个PHP反序列化 Misc这是邹节伦的桌面背景图什么鬼&#xff1f;…

systick定时器

systick作为时基 用到的相关函数如下: void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)//设置时钟源 uint32_t SysTick_Config(uint32_t ticks) // 设置中断时间 SysTick_CLKSourceConfig函数 可以选用两个参数&#xff1a; 1.SysTick_CLKSource_HCLK_Div8 -AHB 时…

基于STM32 HAL库的光电传感器驱动程序实例

本文将使用STM32 HAL库编写一个光电传感器的驱动程序示例。首先&#xff0c;我们会介绍光电传感器的工作原理和应用场景。然后&#xff0c;我们将讲解如何选择合适的STM32芯片和光电传感器组合。接下来&#xff0c;我们会详细介绍使用STM32 HAL库编写光电传感器驱动程序的基本步…

Kafka 生产者 API 指南:深入理解生产者的实现与最佳实践

Kafka 是一个高性能、分布式的消息中间件系统&#xff0c;而其生产者 API 是连接应用程序与 Kafka 集群之间的纽带。本篇博客将深入探讨 Kafka 生产者 API 的核心概念、用法&#xff0c;以及一些最佳实践&#xff0c;帮助你更好地利用 Kafka 构建可靠的消息生产系统。 1. Kafk…

一:对爬虫的简单认识

一&#xff1a;爬虫前导知识 1.爬虫引入&#xff1a; ​ 网络爬虫又称为网络蜘蛛&#xff1b;网络蚂蚁&#xff1b;网络机器人等&#xff0c;可以自动高效地从互联网的海量信息中浏览获取到我们感兴趣的信息&#xff0c;在浏览信息的时候需要按照我们制定的规则进行&#xff…

解决:docx.opc.exceptions.PackageNotFoundError: Package not found at ‘xxx’

解决&#xff1a;docx.opc.exceptions.PackageNotFoundError: Package not found at ‘xxx’ 文章目录 解决&#xff1a;docx.opc.exceptions.PackageNotFoundError: Package not found at ‘xxx’背景报错问题报错翻译报错位置代码报错原因解决方法参考内容今天的分享就到此结…

基础课17——任务问答引擎

任务问答引擎在智能客服系统中负责多轮对话的对话流设计、意图的管理、任务流的执行等功能。能够高效地进行意图识别与任务解析&#xff0c;实现多轮对话的流程设计&#xff0c;并驱动多轮会话任务的高效完成。 1.定义 任务问答引擎负责多轮对话的对话流设计、意图的管理、任…

跳转表Skiplist学习记录

这里写自定义目录标题 9.1.3 接口定义 template <typename K, typename V> struct Dictionary {virtual int size() const 0;virtual bool put(K, V) 0;virtual V* get(K k) 0;virtual bool remove(K k) 0; }

如何选呼叫中心的语音通道?

如何选呼叫中心的语音通道&#xff1f; 在公网语音线路和专线语音线路中&#xff0c;选择合适的语音通道类型需要根据呼叫中心的实际需求进行综合考虑。 如果呼叫中心的预算有限&#xff0c;或者对语音质量和稳定性的要求不高&#xff0c;可以选择公网语音线路。如果需要更高…

cloudreve网盘迁移K8S

先贴配置文件了 cloudreve.yaml apiVersion: apps/v1 kind: Deployment metadata:name: cloudreve-deployment spec:replicas: 1selector:matchLabels:app: cloudrevetemplate:metadata:labels:app: cloudrevespec:containers:- name: cloudreveimage: cloudreve:latestimage…

dante(centos)安装

下载安装包 https://www.inet.no/dante/doc/latest/config/index.html 下载软件 解压 tar -zxvf dante-1.4.3.tar.gz 或者 wget http://www.inet.no/dante/files/dante-1.4.3.tar.gz tar -xvzf dante-1.4.3.tar.gz 编译 cd dante-1.4.3 yum install gcc make -y ##编译必备 …

OpenCV-Python:计算机视觉框架

目录 1.背景 2.早期计算机视觉框架 3.当前主流框架 4.计算机视觉框架的未来趋势 5.知识笔记 1.背景 俗话说“工欲善其事必先利其器”&#xff0c;想要学好计算机视觉&#xff0c;需要借助于相关的计算机视觉库&#xff0c;这样在进行学习的时候可以达到事半功倍的效果。 …

WebDriver运行原理的深入剖析

在现代软件开发中&#xff0c;自动化测试已经成为了不可或缺的一部分。它可以帮助开发者快速、准确地完成软件的功能测试&#xff0c;提高开发效率。而WebDriver就是实现这一目标的重要工具之一。那么&#xff0c;WebDriver是如何工作的呢&#xff1f;本文将通过生活案例&#…

使用python的opencv实现人脸识别

简介&#xff1a;本项目主要使用python语言&#xff0c;主要的模块库有os&#xff0c;opencv-python&#xff0c;opencv-contrib-python。项目主要分为三个部分&#xff0c;人脸录入&#xff0c;训练数据&#xff0c;实现人脸的识别。本博客包含源代码&#xff0c;以及各个功能…

Emscripten学习笔记之内存模型

编译目标选择&#xff1a; 在WebAssembly标准出现前的很长一段时间内&#xff0c;Emscripten的编译目标是asm.js。自1.37.3起&#xff0c;Emscirpten才开始正式支持WebAssembly。 以asm.js为编译目标时&#xff0c;C/C代码被编译为.js文件&#xff1b;以WebAssembly为编译目标…

MVC、MVP、MVVM模式的区别

前言&#xff1a;这三个表现层框架设计模式是依次进化而形成MVC—>MVP—>MVVM。在以前传统的开发模式当中即MVC模式&#xff0c;前端人员只负责Model&#xff08;数据库&#xff09;、 View&#xff08;视图&#xff09;和 Controller /Presenter/ViewModel&#xff08;控…

Google Guava 的Preconditions类各种用法

Preconditions类 提供静态方法列表&#xff0c;用于检查是否使用有效参数值调用方法或构造函数。如果前提条件失败&#xff0c;则会抛出指定异常。 前置依赖 引入 pom <dependency><groupId>com.google.guava</groupId><artifactId>guava</artif…

android开发市场被抢占,鸿蒙能入行吗?

根据最新的数据&#xff0c;华为Mate60系列在上市第二周就成功占据了国内手机市场的17%份额&#xff0c;排名第二。而机构预测&#xff0c;华为手机在第37周有望超过20%的市场份额&#xff0c;成为国内手机市场的冠军。 一开始&#xff0c;人们对HarmonyOSNEXT持保留态度&…