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

本文共 752 字,大约阅读时间需要 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 #设置一个未知属性,从而引发异常。

 

转载于:https://www.cnblogs.com/JiangLe/p/4961200.html

你可能感兴趣的文章
Android Xutils 框架
查看>>
C#基础知识整理 基础知识(21) 委托(二)
查看>>
Android应用程序键盘(Keyboard)消息处理机制分析(16)
查看>>
Sysbench 0.5版安装配置
查看>>
统一沟通-技巧-11-Lync-联盟-无法-音频-远程桌面-传文件
查看>>
书摘—你不可不知的心理策略
查看>>
【博客话题】毕业——开始人生的艰苦历程
查看>>
2014.7.30-8.3日广大网友的提问解答(答问题的第2个工作周)
查看>>
Powershell管理系列(二十五)PowerShell操作之获取AD账号及邮箱信息
查看>>
Linux安装telnet
查看>>
【高德地图API】从零开始学高德JS API(三)覆盖物——标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物...
查看>>
openstack nova修改实例路径,虚拟磁盘路径
查看>>
java.sql.SQLException: Lock wait timeout exceeded --转
查看>>
使用C#进行图像处理的几种方法(转)
查看>>
Ajax原理学习
查看>>
sap scriptfom 多语言翻译
查看>>
实现超级简单的bug管理系统
查看>>
[LeetCode] Find Anagram Mappings 寻找异构映射
查看>>
--Too small initial heap for new size specified
查看>>
黄聪:3分钟学会sessionStorage用法
查看>>