Python __getattr__与__setattr__使用方法

转载 2015年11月19日 22:30:01
#比较好的例子
class JsonDict(dict):
    def __getattr__(self,attr):
        try:
            return self[attr]
        except KeyError:
            raise AttributeError(r"'JsonDict' object has no attribute '%s'" % attr)

    #可以重写dict,使之通过“.”调用  
    def __setattr__(self,attr,value):
        self[attr] = value

j=JsonDict(name='python',age='28')
print j.name
print j.age



class Book(object):
    def __setattr__(self, name, value):
        if name == 'value':
            object.__setattr__(self, name, value - 100)
        else:
            object.__setattr__(self, name, value)
    def __getattr__(self, name):
        try:
            return object.__getattribute__(name)
        except:
            return name + ' is not found!'
    def __str__(self):
        return self.name + ' cost : ' + str(self.value)

c = Book()
c.name = 'Python'
c.value = 100
print c.name
print c.value
print c
print c.Type

上面的例子中,在赋值书的value属性时,偷偷的将value减去了100,呵。输出结果:

Python
0
Python cost : 0
Type is not found! 


参考:http://www.cnblogs.com/coderzh/archive/2008/05/25/1206931.html

python __getattr__ 和 __setattr__方法、属性私有化

__getattr__方法 拦截点号运算。当对未定义的属性名称和实例进行点号运算时,就会用属性名作为字符串调用这个方法。如果继承树可以找到该属性,则不调用此方法。 class empty: def...
  • u012156686
  • u012156686
  • 2016年10月11日 22:29
  • 5405

python魔法方法:__getattr__,__setattr__,__getattribute__

转载:http://blog.csdn.net/fjslovejhl/article/details/40683547 难得有时间看看书。。。。静下心来好好的看了看Python。。其...
  • yugongpeng_blog
  • yugongpeng_blog
  • 2015年05月20日 11:52
  • 4362

Python __getattr__与__setattr__使用方法

#比较好的例子class JsonDict(dict): def __getattr__(self,attr): try: return self[at...
  • nextdoor6
  • nextdoor6
  • 2015年11月19日 22:30
  • 417

Python语言学习讲解十七:python之__gettattr__、__getattribute__和__setattr__详解

http://blog.csdn.net/windgs_yf/article/details/53409482 >>> print(testobj.__dict__) {'__methods__'...
  • Windgs_YF
  • Windgs_YF
  • 2016年12月01日 15:49
  • 1228

python类中的__call__、__init__、__getattr__、__setattr__、__setattr__详解

python类中的__call__、__init__、__getattr__、__setattr__、__setattr__详解
  • zhtengsh
  • zhtengsh
  • 2016年03月30日 21:15
  • 973

Python __getattr__与__setattr__使用方法

比如下面的例子: class Book(object):     def __setattr__(self, name, value):         if name == ...
  • u011653701
  • u011653701
  • 2015年05月26日 16:51
  • 179

python __setattr__ , __getattr__ , __setattribute__ 防止死循环

Python Class 对象或类型通过内置成员 __dict__ 来存储成员信息。   我们还可以通过重载 __getattr__ 和 __setattr__ 来拦截对成员的访问,需要注意的是...
  • jb19900111
  • jb19900111
  • 2014年02月18日 20:05
  • 6325

python魔法方法:__getattr__,__setattr__,__getattribute__

难得有时间看看书。。
  • fjs_cloud
  • fjs_cloud
  • 2014年11月01日 20:39
  • 6964

python中 __getattr__(self,name)和__setattr__(self,name,value)的使用

在 Python 中,当访问一个对象的会根据不同的情况作不同的处理,是比较复杂的。一般象a.b这样的形式,python可能会先查找a.__dict__中是否存在,如果不存在会在类的__dict__中去...
  • hehe123456ZXC
  • hehe123456ZXC
  • 2016年01月20日 16:44
  • 236

Python __getattr__ __getattribute__ __setattr__

__getattr__ 如果某类定义了__getattr__,同时系统在该类对象的实例字典中又找不到待查询的属性,系统就会调用这个方法,这种行为非常适合无结构数据的按需访问。 class A: ...
  • u011019726
  • u011019726
  • 2017年11月23日 20:07
  • 49
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python __getattr__与__setattr__使用方法
举报原因:
原因补充:

(最多只允许输入30个字)