魔术方法 python,python的魔法函数
本文主要介绍python的神奇方法__setattr__()。python提供了很多神奇的方法,其中__setattr__()方法主要用于给类实例分配属性。请进入与边肖的文章,以了解更多信息。
00-1010前言:1。实例属性管理__dict__2、__setattr__()和__dict__3、重载__setattr__()一定要认真总结:
目录
Python提供了很多神奇的方法,其中__setattr__()方法主要用于给类实例分配属性,其定义在Object类官方提供的说明如下:
当试图进行属性赋值时调用。
这被调用而不是正常的机制(即,将值存储在实例字典中)。
name是属性名,value是要分配给它的值。
简单来说就是在属性赋值时调用__setattr__()并将值存储在实例字典中,应该是self的__dict__属性。即类实例的每个属性赋值时,首先调用__setattr__()方法,在__setattr__()方法中将属性名和值添加到类实例的__dict__属性中。
前言:
下面的测试代码定义了三个实例属性,每个属性都在注册后的这个时候打印()了__dict__。
代码如下:
另一类Fun:
def __init__(self):
刘
打印(自我。__字典_ _)
self.age=12
打印(自我。__字典_ _)
self.male=True
打印(自我。__字典_ _)
另一个乐趣=另一个乐趣()
结果显示,每次分配实例属性时,属性名称和相应的值将存储在__dict__ dictionary中:
{name: 刘 }
{ 姓名 : 刘,年龄 : 12}
{ 姓名 : 刘,年龄 : 12,男 :真}
1、实例属性管理__dict__
因为每次类实例分配属性时都会调用__setattr__()方法,所以可以重载__setattr__()方法,以便在每次分配实例属性时动态观察__dict__()的变化。下面这个Fun类重载了__setattr__()方法,并把实例的属性和属性值作为__dict__)的键值对:
Fun:类
def __init__(self):
刘
self.age=12
self.male=True
def __setattr__(self,key,value):
打印( **50)
打印(设置:{},用:{} 。格式(关键字[],值))
打印( current __dict__ : {} )。格式(自我。__dict__))
#财产登记
自我。__dict__[key]=值
好玩=好玩()
在__setattr__()中添加属性名作为键,属性值作为值添加到__dict__,得到的结果如下:.
**************************************************
设置:名称,带:Liu
当前__字典__ : {}
**************************************************
设置:年龄,用:12
当前__dict__ : { 姓名 : 刘 }
**************************************************
设置:男,真
当前_词典_ : { 姓名 : 刘,年龄 : 12}
可以看到,当__init__()中的三个属性被赋值时,每次都会调用__setattr__()函数一次。
2、__setattr__()与__dict__
由于__setattr__()负责在__dict_中注册属性,所以重载时要经过属性注册过程。以下是__setattr__()不注册属性的示例:
类别NotFun:
def __init__(self):
刘
self.age=12
self.male=True
def __setattr__(self,key,value):
及格
not _ fun=NotFun()
print(not_fun.name)
因为属性没有注册在__setattr__中的__dict__中,所以not_fun对象没有name属性,所以最后一次打印(not_fun.name)会报告该属性不存在的错误:
AttributeError Traceback(最近一次调用)
模块()中的ipython-input-21-6158d7aaef71
8次通过
9 not_fun=NotFun()
- 10 print(not_fun.name)
attribute error :“not fun”对象没有属性“name”
所以在重载__setattr__,必须考虑是否在__dict_中注册属性。
3、重载__setattr__()必须谨慎
python的实例属性的定义、获取和管理都可以通过__setattr__()和__dict__(当然还有相应的__getattr__()方法来进行,本文暂且不分析。__setattr__()方法是在类的属性赋值时调用的,通常需要在self的__dict__ dictionary中存储属性名和属性值。
关于python魔法__setattr__()的这篇文章就到此为止。更多相关python魔术内容,请搜索热门IT软件开发工作室往期文章或继续浏览以下相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。