码迷,mamicode.com
首页 > 编程语言 > 详细

python---__getattr__\__setattr_重载'.'操作

时间:2015-11-13 10:11:11      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:

#!coding:utf-8

class Person(object):
    def __init__(self,id):
        #定义一个名为ID的属性
        self.ID=id
    def __getattr__(self,attr):
        #__getattr__用于重载对象实例的‘.‘操作符,
        #如果.操作符调用的属性存在就直接返回属性;不然就调用__getattr__来返回
        print in __getattr__
        if attr==Name:
            return My name is hello world
        else:
            raise AttributeError,attr
    def __setattr__(self,attr,value):
        if attr==Name:
            #注意这个时间是不能对属性直接赋值的,要不然就是一个死循环了
            self.__dict__[attr]=value
        else:
            raise AttributeError,attr+not find

if __name__==__main__:
    p=Person(007)
    print p.ID
    print p.Name  #这里会调用__getattr__,因为实例并没有注册Name这个属性。
    p.A=1 #设置一个未知属性,从而引发异常。

 

python---__getattr__\__setattr_重载'.'操作

标签:

原文地址:http://www.cnblogs.com/JiangLe/p/4961200.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!