Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1237721
  • 博文数量: 220
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1769
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-13 16:19
个人简介

努力, 努力, 再努力

文章分类

全部博文(220)

文章存档

2018年(8)

2017年(46)

2016年(75)

2015年(92)

我的朋友

分类: Python/Ruby

2016-01-08 05:40:02

摘自: 

迪艾姆python培训 黄哥所写 
咨询:qq:1465376564 
迪艾姆python远程视频培训班 
 

""" 
class WrapMe(object): 

def __init__(self,obj): 
self.__data=obj 

def get(self): 
return self.__data 

def __repr__(self): 
return repr(self.__data) 

def __str__(self): 
return str(self.__data) 

def __getattr__(self,attr): 
print attr 
print getattr(self.__data,attr) 
return getattr(self.__data,attr) 

lst = [8,9,12,67,88] 
p = WrapMe(lst) 
print p.pop() 
上面是代码 
下面是执行结果 
pop 
 
88 

包装类中定义了(覆盖)一个__getattr__()方法,当包装类WrapMe生成的实例通过点运算符号调用一个属性时,如果这个属性在类WrapMe生成的实例的__dict__ 和类WrapMe的__dict__和类WrapMe父类的__dict__中 都找不到时,这个__getattr__()方法被调用。 

请看代码,包装类WrapMe中覆盖了__getattr__()方法,它的返回值是调用内置方法getattr(),返回被包装对象的属性。我在这个__getattr__()方法中加了2个print 语句,就很清楚这个过程了。 

通过这个__getattr__()方法的返回值,是返回的是被包装对象的属性,也就是说将被包装对象的属性 
授权给包装类使用。 

特别要注意的是,如果被包装对象没有这个属性,那么就会报错误。

特别提示:实例属性、类属性、类中定义的方法都是属性。 

阅读(1114) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~