python中常见的魔法方法 magic method
魔法方法 magic method(类中定义的双下方法)
魔法方法都是父类object有的,在python3中所有的类默认都会继承object。当我们对这个对象使用这些函数或者运算符时就会调用类中的对应魔法方法,可以理解为重写这些python的内置函数。到达某种条件自动触发
_ _ call _ _( **args,*kwargs ) 方法
类加( )触发类的元类的__call__方法 ,当给对象加括号调用的时候,自定触发_ call _方法
高度定制对象的产生过程,可以操作元类里面的__call__
class MyClass(object):def __init__(self,name):self.name = namepassdef __str__(self):# print('__str__方法')return '对象:%s'%self.namedef __call__(self, *args, **kwargs):print('__call__')print(args)print(kwargs)
obj = MyClass('tom')
obj(1,2,name='tom',age=18)
_ _ new _ _(cls)方法 由object基类提供的内置静态方法
__new__方法专门用于产生空对象
当我们创建实例的时候、在内存中为对象分配空间,返回对象引用,python解释器获取对象引用后,并将__new__方法的返回值将传递给__init__方法作为第一个参数,最后__init__给这个实例设置一些参数.(__new__方法在__init__方法之前被调用)
类产生对象的步骤1.产生一个空对象(__new__方法专门用于产生空对象)2.自动触发__init__方法实例化对象3.返回实例化好的对象__new__方法专门用于产生空对象 骨架
__init__方法专门用于给对象添加属性 血肉
_ _init _ _ ( self ) 对象初始化 / 实例化方法
类实例化创建对象时,自动触发
高度定制类的产生过程,可以操作元类里面的__init__
通过类**实例化**创建对象时,自动触发执行,然后设置对象属性的一些初始值,用来为对象初始化自己独有的数据,通常用在初始化一个类实例的时候,是一个实例方法。
class MyClass(object):def __init__(self, name):"""实例化对象的时候自动触发"""self.name = nameprint('__init__方法')
obj = MyClass('tom')# __init__方法
_ _ str _ _ ( self ) 方法
打印对象会自定触发的函数/方法,返回值必须是字符串类型
str函数或者print函数—>obj.str()
如果想要把一个类的实例变成str,就需要实现特殊方法__str__(self),print打印出来的是个对象,使用了就把对象变成字符串,打印从这个方法中return出来的数据class MyClass(object):def __str__(self):"""对象被执行打印操作的时候会自动触发该方法必须返回一个字符串返回什么字符串打印对象之后就展示什么字符串"""def __str__(self):print('__str__方法')return ''
obj = MyClass()
print(obj)
_ _ getattr _ _( self, item ) 方法
当对象获取一个不存在的属性名自动触发,存在不触发
- 在对象.__dict__里找不到就会触发
class MyClass(object):def __getattr__(self, item):"""当对象获取一个不存在的属性名 自动触发该方法返回什么 对象获取不存在的属性名就会得到什么,不返回默认为None形参item就是对象想要获取的不存在的属性名"""print('__getattr__', item)return '您想要获取的属性名:%s不存在'%item
obj = MyClass('tom')
print(obj.age) # 获取对象不存在的属性名age# 只要是查找获取属性最后都会走_ _ getattr _ _方法
_ _ setattr _ _(self, key, value ) 方法
对象无论在哪里 操作(对象.属性 = 属性值)属性值的时候,都会自动触发
class MyClass(object):def __init__(self, name):"""实例化对象的时候自动触发"""self.name = nameprint('__init__方法')def __setattr__( key, value):"""对象操作属性值的时候自动触发>>>: 对象.属性名=属性值"""print("__setattr__")print(key)print(value)**super().__setattr__(key, value)** # 属性名(key)=属性值(value)
obj = MyClass('tom')
print(obj.__dict__) # 查看对象名称空间发现打印为空字典{}
# 因为我们定义了一个和父类一模一样的方法名,顶替掉了,重写派生了该方法,且没有将**属性 = 属性值**键的值对塞到对象的名称空间,重新继承父类即可
_ _ del _ _( self ) 方法
删除对象属性的时候,自动触发(主动删除),当所有代码执行完成结束,整个名称空间都要删除,还会自动触发(释放空间,被动删除)
class MyClass(object):def __del__(self):"""对象在被删除(主动 被动)的时候自动触发"""print('__del__')
obj = MyClass('tom')
_ _ getattribute _ _ ( self,item ) 方法
对象获取属性值的时候,自动触发,无论这个属性存不存在。当类中既有_ _ getattr _ ,又有 _ getattribute _ ,只会走 _ getattribute _ _
class MyClass(object):def __getattribute__(self, item):"""对象获取属性的时候自动触发 无论这个属性存不存在当类中既有__getattr__又有__getattribute__的时候 只会走后者形参item就是对象获取的属性名 """# print('__getattribute__')# return super(MyClass, self).__getattribute__(item) 复杂写法**return super().__getattribute__(item) # 简便写法**
obj = MyClass('tom')
_ _ enter _ _( self ) 方法
对象被with语法(上下文管理协议)执行的时候自动触发,该方法返回什么,as关键字后面的变量名就能得到什么
_ _ exit _ _( self,exc_type,exc_val,exc_tb ) 方法
对象被with语法(上下文管理协议)执行并运行完with子代码后自动触发
_ _ setitem _ _ (self,value,key)方法
这个方法会让类按照一定的方法存储和key映射的value
python中常见的魔法方法 magic method相关推荐
- Python 中常见的魔法方法
什么是Python魔法方法 魔法方法是在Python的类中被双下划线前后包围的方法,如常见的 :init.new.__del__等.这些方法在类或对象进行特定的操作时会自动被调用,我们可以使用 ...
- python的魔法方法(magic method)
1,什么是魔法方法 对象中前后都有双下划线修饰的方法中大部分是有特殊意义的,在这样的名称中很大一部分是魔法(特殊)方法的名称,如__future__. 如果你的对象实现(重载)了这些方法中的某一个,那 ...
- Python魔法方法(magic method)细解几个常用魔法方法(下)
接上文,再介绍最后几个常用的魔法方法. 关于__dict__: 先上个例子: class Test(object):fly = Truedef __init__(self, age):self.age ...
- Python的面向对象(二):Python中神奇的魔法方法
魔法方法 Python里面有一种特殊的方法,叫做魔法方法.Python的类里提供的,是由两个下划线开始,再以两个下划线结束的方法. 魔法方法不需要手动调用,会在恰当的时候就会被激活,自动执行. 魔法方 ...
- python 中常见的面试练习题
python 中常见的面试题 语言特性 编码规范 数据类型-字符串 数据类型 - 列表 数据类型 - 字典 数据类型 - 综合 操作类题目 高级特性 正则表达式 其他内容 算法和数据结构 爬虫类 网络 ...
- Python 中常见的配置文件写法
相信学习Python或者正在进行Python工作的小伙伴都会有一个疑问,为什么要写配置文件呢?在开发过程中,我们常常会用到一些固定参数或者是常量.对于这些较为固定且常用到的部分,往往会将其写到一个固定 ...
- python中类方法与实例方法的区别-Python中的对象,方法,类,实例,函数用法分析...
本文实例分析了Python中的对象,方法,类,实例,函数用法.分享给大家供大家参考.具体分析如下: Python是一个完全面向对象的语言.不仅实例是对象,类,函数,方法也都是对象. class Foo ...
- Python中有用的字符串方法
字符串是字符序列.Python中内置的string类代表基于Unicode国际字符集的字符串.除了Python中常见的操作外,字符串还有一些专属于它们的附加方法.下图显示了所有这些可用的方法: 在本文 ...
- Python中常见的配置文件写法分享!
相信学习Python或者正在进行Python工作的小伙伴都会有一个疑问,为什么要写配置文件呢?在开发过程中,我们常常会用到一些固定参数或者是常量.对于这些较为固定且常用到的部分,往往会将其写到一个固定 ...
最新文章
- 麦肯锡:潜力巨大,障碍多多,人工智能医疗是蓝海还是虚火?
- 高仿精仿手机版QQ空间应用源码
- Visual Basic 15语言新特性
- 987. 二叉树的垂序遍历
- Linux包含一个名称是()的调试程序,开发一个 Linux 调试器(九):处理变量
- activiti6使用
- git与svn, tfs等源代码管理器的协同
- java 命令行 解析_如何在Java中解析命令行参数?
- 基于visual Studio2013解决C语言竞赛题之0701排队输出
- TI - MCU - MSP430使用指南1 - MSP430简介及选型指南
- 台式计算机有线无线网卡设置,电脑无线网卡如何使用 电脑外置无线网卡详细使用图文教程...
- 如何在Tomcat后台通过文件上传getshell总结(个人学习笔记思路)
- 巴菲特-芒格-彼得林奇的经典观点梳理
- wordpress插件_顶级WordPress反垃圾邮件插件
- HDFS与HBASE的动态节点的扩容(增删)小白级(二)
- 我越脱俗,就会越世俗
- Gnirehtet使用教程 —— 将电脑网络通过USB共享给Android 设备
- 前端和后台BUG区分方法
- Neo4j【有与无】【N0】前言
- Android Studio做登录界面
热门文章
- 机器学习入门:聚类算法-5
- 惊!钉钉CEO离职创业跨境出海领域;中欧班列跑出新高度;浙江数字化步伐再加速…|洞悉跨境
- Redis 实战篇:Geo 算法教你找出附近 “女朋友”!
- termux python 打开摄像头_玩转科技-python远程调用并开启摄像头
- 《媒体大数据分类分级指南》团体标准正式发布,易观分析参与编制
- LevelDb日知录
- 自制 Windows 小工具 ———— 智能截屏工具
- 超简单,在Win10上配置安卓子系统WSA,直接运行APP
- 【弱监督学习】End-to-end weakly supervised semantic segmentation with reliable region mining
- 南科大计算机成果,南科大何佳清教授团队在《Science》发表SnSe热电材料最新研究成果...