魔术方法 python,python的魔法函数

  魔术方法 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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: