频道栏目
首页 > 资讯 > Python > 正文

python中的__dict__,__getattr__,__setattr__

17-09-06        来源:[db:作者]  
收藏   我要投稿

python class 通过内置成员dict 存储成员信息(字典)

首先用一个简单的例子看一下dict 的用法

class A():
    def __init__(self,ax,bx):
        self.a = ax
        self.b = bx
    def f(self):
        print (self.__dict__)
a = A(1,2)
a.f()

输出结果:{‘b’: 2, ‘a’: 1}

简化成下面的代码

class Person:
    def __init__(self,_obj):
        self.__dict__.update(_obj)

我们可以通过重载getattrsetattr来拦截对成员的访问或者作出一些自己希望的行为
getattr 在访问对象访问类中不存在的成员时会自动调用

class A():
    def __init__(self,ax,bx):
        self.a = ax
        self.b = bx
    def f(self):
        print (self.__dict__)
    def __getattr__(self,name):
        print ("__getattr__")
a = A(1,2)
a.f()
a.x

输出结果

{'b': 2, 'a': 1}
__getattr__

setattr 方法用于在初始化对象成员的时候调用,即在设置dict的item时就会调用setattr方法。 具体看下面的例子

class A():
    def __init__(self,ax,bx):
        self.a = ax
        self.b = bx
    def f(self):
        print (self.__dict__)
    def __getattr__(self,name):
        print ("__getattr__")
    def __setattr__(self,name,value):
        print ("__setattr__")
        self.__dict__[name] = value



a = A(1,2)
a.f()
a.x
a.x = 3
a.f()

输出结果

__setattr__
__setattr__
{'a': 1, 'b': 2}
__getattr__
__setattr__
{'a': 1, 'x': 3, 'b': 2}
相关TAG标签
上一篇:Latex多处引用同一脚注
下一篇:TCP与UDP的区别和优点
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站