广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python魔术方法深入分析讲解
  • 169
分享到

Python魔术方法深入分析讲解

Python魔术方法Python魔术方法原理 2023-02-08 12:02:00 169人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录前言__init____new____call____del____str__总结前言 魔术方法就是一个类/对象中的方法,和普通方法唯一的不同是:普通方法需要调用,而魔术方法是在

前言

魔术方法就是一个类/对象中的方法,和普通方法唯一的不同是:普通方法需要调用,而魔术方法是在特定时刻自动触发

__init__

初始化魔术方法

初始化魔术方法
如何触发:初始化对象时触发
参数:至少一个self
返回值:无
作用:初始化对象的成员
注:使用这个方式初始化的成员都是写入对象中的,类中不存在

class Person:
    def __init__(self,name):
        self.name = name
a = Person('lisan')
print(a.name)

__new__

实例化魔术方法

如何触发:在实例化对象时触发

参数:至少一个cls,接收当前类

返回值:必须返回一个对象实例

作用:实例化对象

注意:实例化对象是Object类底层实现,其他类继承了Object的 __new__才能够实现实例化对象。没事别碰这个魔术方法,先触发__new__,才会触发__init__

class Person:
    def __init__(self,name):
        print('------------init')
        self.name = name
    def __new__(cls,*args,**kwargs):
        print('----------new')
        return super(Person,cls).__new__(cls,*args,**kwargs)
a = Person('lisan')

__call__

调用对象的魔术方法

如何触发:将对象当作函数调用时触发对象()

参数:至少一个self接收对象

返回值:根据情况而定

作用:可以将复杂的步骤进行合并操作,减少调用的步骤,方便使用

注意:无

class Person:
    def __init__(self):
        print('------------init')
    def __new__(cls ,*args ,**kwargs):
        print('----------new')
        ip = object.__new__(cls ,*args ,**kwargs)
        print(ip)
        return ip
    def __call__(self ,name):
        print('-----------call')
        print(f'执行对象得到的参数{name}')
a = Person()
a('nbnb')

__del__

析构魔术方法

如何触发:当对象没有用(没有任何变量引用)的时候触发

参数:一个self

返回值:无

作用:使用完对象是回收资源

注意:del不一定会触发当前方法,只有当前对象没有任何变量接收时才会触发

class Person:
    def __init__(self,name):
        self.name = name
    def __del__(self):
        pass
a = Person('lisi')
b = a
print(b.name)
b.name = 'wangwu'
print(a.name)

通过del可以删除某对象对地址的引用。

通过import sys``sys.getrefcount(a)可以查看对地址的引用次数。

当代码全部执行结束的时候,会自动执行del方法。

__str__

触发时机:当你打印对象名的时候自动触发,调用 __str__里面的内容

注意:一定要加返回值,return后面的内容就是打印对象看到的内容。

class Person:
    def __init__(self,name):
        self.name = name
    # def __str__(self):
    #     return self.name
a = Person('lisan')
print(a)

当我们直接打印对象的时候,打印出来的是一个地址,这个地址我们是看不懂的,编译器才看得懂。

想打印对象名,要显示出准确的东西,就需要 __str__

class Person:
    def __init__(self,name):
        self.name = name
    def __str__(self):
        return self.name
a = Person('lisan')
print(a)

总结

__init__和__str__这两个是重点。

__new__的作用:开辟空间

__del__的作用:没有指针引用的时候会调用,一般是不需要重写的

__call__的作用:想不想让对象当函数用。

到此这篇关于python魔术方法深入分析讲解的文章就介绍到这了,更多相关Python魔术方法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python魔术方法深入分析讲解

本文链接: https://www.lsjlt.com/news/195165.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python魔术方法深入分析讲解
    目录前言__init____new____call____del____str__总结前言 魔术方法就是一个类/对象中的方法,和普通方法唯一的不同是:普通方法需要调用,而魔术方法是在...
    99+
    2023-02-08
    Python魔术方法 Python魔术方法原理
  • python深入讲解魔术方法
    目录一、python内置的基本魔术方法二、python中容器类型的的魔术方法三、python中算数运算符的魔术方法什么是魔术方法(魔法方法/特殊方法) 魔术方法都不需要手动去调用是在...
    99+
    2022-11-11
  • Python字典高级用法深入分析讲解
    目录一、 collections 中 defaultdict 的使用1.字典的键映射多个值2.统计字典中某个值出现的次数二、collections 创建有序字典1.改变 key-va...
    99+
    2022-11-11
  • C++深入分析讲解链表
    目录链表的概述1、数组特点2、链表的概述3、链表的特点静态链表链表的操作1、链表插入节点头部之前插入节点尾部之后插入节点有序插入节点2、遍历链表节点3、查询指定节点4、删除指定节点5...
    99+
    2022-11-13
  • JavaHashMap源码深入分析讲解
    1.HashMap是数组+链表(红黑树)的数据结构。 数组用来存放HashMap的Key,链表、红黑树用来存放HashMap的value。 2.HashMap大小的确定: 1) Ha...
    99+
    2022-11-13
  • Golangsync.Map原理深入分析讲解
    目录GO语言内置的mapsync.Mapsync.Map原理分析sync.Map的结构查找新增和更新删除GO语言内置的map go语言内置一个map数据结构,使用起来非常方便,但是它...
    99+
    2022-12-17
    Go sync.Map Golang sync.Map原理
  • RocketMq深入分析讲解两种削峰方式
    目录何时需要削峰通过消息队列的削峰方法有两种消费延时控流总结何时需要削峰 当上游调用下游服务速率高于下游服务接口QPS时,那么如果不对调用速率进行控制,那么会发生很多失败请求 通过消...
    99+
    2023-01-28
    RocketMq削峰 RocketMq削峰方式 RocketMq削峰代码
  • Java深入分析讲解反射机制
    目录反射的概述获取Class对象的三种方式通过反射机制获取类的属性通过反射机制访问Java对象的属性反射机制与属性配置文件的配合使用资源绑定器配合使用样例通过反射机制获取类中方法通过...
    99+
    2022-11-13
  • C++深入分析讲解智能指针
    目录1.简介2.unique_ptr指针(独占指针)3.shared_ptr指针(共享所有权)4.weak_ptr(辅助作用)5.自实现初级版智能指针6.总结1.简介 程序运行时存在...
    99+
    2022-11-13
  • Spring深入分析讲解BeanUtils的实现
    目录背景DOBODTOVO数据实体转换使用方式原理&源码分析属性赋值类型擦除总结背景 DO DO是Data Object的简写,叫做数据实体,既然是数据实体,那么也就是和存储...
    99+
    2022-11-13
  • ReactHooks核心原理深入分析讲解
    目录Hooks闭包开始动手实现将useState应用到组件中过期闭包模块模式实现useEffect支持多个HooksCustom Hooks重新理解Hooks规则React Hook...
    99+
    2022-12-17
    React Hooks React Hooks原理
  • Android权限机制深入分析讲解
    目录1、权限2、在程序运行时申请权限1、权限 普通权限:不会直接威胁到用户安全和隐私的权限危险权限:那些可能会触及用户隐私或者对设备安全性造成影响的权限。 到Android 10 系...
    99+
    2022-12-08
    Android权限机制 Android权限管理 Kotlin权限机制
  • pandas中df.groupby()方法深入讲解
    目录分组:根据研究目的,将所有样本点按照一个或多个属性划分为多个组,就是分组。分组的返回结果按一列分组:df.groupby(column)按多列分组:df.groupby([col...
    99+
    2022-12-20
    pandas的groupby函数 pandas df.groupby()方法 pandas groupby agg用法
  • php中魔术方法的示例分析
    这篇文章给大家分享的是有关php中魔术方法的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php魔术方法:1、【_sleep()】控制对象序列化时真正处理的部分;2、【_wakeup()】在反序列化后还原...
    99+
    2023-06-14
  • C++深入分析讲解类的知识点
    目录知识点引入类的初识1、封装2、权限3、类的定义(定义类型)4、类的成员函数与类中声明及类外定义Person类的设计设计立方体类点Point和圆Circle的关系知识点引入 C语言...
    99+
    2022-11-13
  • AndroidView的事件分发机制深入分析讲解
    目录1.分发对象-MotionEvent2.如何传递事件1.传递流程2.事件分发的源码解析1.Activity对点击事件的分发过程2.顶级View对点击事件的分发过程3.主要方法4....
    99+
    2023-01-29
    Android View事件分发机制 Android事件分发
  • python进阶之魔术方法详解
    目录一、三个内置函数二、双下划线开头和结尾的方法,叫魔术方法。总结一、三个内置函数 1、@classmethod–类名.属性名 2、@staticmethod&ndash...
    99+
    2022-11-12
  • SpringBoot深入分析讲解日期时间处理
    目录GET请求及POST表单日期时间字符串格式转换使用自定义参数转换器(Converter)使用Spring注解使用ControllerAdvice配合initBinderJSON入...
    99+
    2022-11-13
  • SpringBoot深入分析讲解监听器模式上
    目录1、事件ApplicationEvent2、监听器ApplicationListener3、事件广播器ApplicationEventMulticaster 注:图片来源于网络 ...
    99+
    2022-11-13
  • SpringBoot深入分析讲解监听器模式下
    我们来以应用启动事件:ApplicationStartingEvent为例来进行说明: 以启动类的SpringApplication.run方法为入口,跟进SpringApplica...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作