博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python---__getattr__\__setattr_重载'.'操作
阅读量:6283 次
发布时间:2019-06-22

本文共 701 字,大约阅读时间需要 2 分钟。

#!coding:utf-8class 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 #设置一个未知属性,从而引发异常。

 

转载地址:http://tcxva.baihongyu.com/

你可能感兴趣的文章
微服务-分解应用程序从而实现更好的部署特性及可伸缩性
查看>>
mac 连接windows 共享内容
查看>>
GPS模块编程之NMEA0183协议
查看>>
Linux常用命令_(安装包管理)
查看>>
成都亚马逊AWSome Day回顾
查看>>
scaletype
查看>>
System.Runtime.InteropServices 命名空间
查看>>
浅谈百度司南大数据企业的风向标
查看>>
[原] Intellij IDEA开发Android,祝还在使用eclipse的早日脱离苦海
查看>>
在 NetBeans IDE 6.0 中分析 Java 应用程序性能
查看>>
DIOCP开源项目-DIOCP3直接发送对象,帮你处理粘包问题
查看>>
java使用httpcomponents post发送json数据
查看>>
八大排序算法总结
查看>>
yii2 关系...
查看>>
ORACLE中index的rebuild(转)
查看>>
我们的前端模版引擎更新总结
查看>>
Nginx中的rewrite指令
查看>>
堆和栈的差别(转过无数次的文章)
查看>>
history对象back()、forward()、go()
查看>>
Oracle----dual
查看>>