想喝猪肝汤

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

获取对象信息

 1 # 使用dir()
 2 print(dir("ABC"))
 3 print(len("ABC"))
 4 
 5 # 如果自己实现的类也要实现len(myobj),可以重写__len__方法
 6 
 7 
 8 class MyDog(object):
 9 def __len__(self):
10 return 1000
11 
12 
13 dog = MyDog()
14 print(len(dog))
15 
16 # 仅仅把属性和方法列出来是不够的,配合getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态:
17 
18 
19 class Myobject(object):
20 def __init__(self):
21 self.x = 9
22 
23 def power(self):
24 return self.x * self.x
25 
26 
27 obj = Myobject()
28 print(hasattr(obj, 'y')) # 有y属性吗
29 setattr(obj, 'y', 19) # 设置一个属性'y' 值为19
30 print(hasattr(obj, 'y')) # 有y属性吗
31 print(getattr(obj, 'y')) # 获取'y'属性的值
32 # 如果不存在z属性就报以下异常
33 # AttributeError: 'Myobject' object has no attribute 'z'
34 # getattr(obj, 'z')
35 # 在使用getattr 如果没有的话可以传入一个默认值
36 print(getattr(obj, 'w', 500)) # 获取属性'w',如果不存在,返回默认值500
37 
38 
39 # 也可以获取对象的方法
40 print(hasattr(obj, 'power')) # 有属性'power'吗?
41 print(getattr(obj, 'power')) # 获取属性'power'
42 fn = getattr(obj, 'power') # 获取到后 赋值到一个变量
43 print(fn()) # 通过变量调取原始方法
44 
45 # 使用场景
46 
47 """
48 假设我们希望从文件流fp中读取图像,我们首先要判断该fp对象是否存在read方法,如果存在,则该对象是一个流,如果不存在,则无法读取。hasattr()就派上了用场。
49 请注意,在Python这类动态语言中,根据鸭子类型,有read()方法,不代表该fp对象就是一个文件流,它也可能是网络流,也可能是内存中的一个字节流,但只要read()方法返回的是有效的图像数据,就不影响读取图像的功能。
50 """
51 
52 
53 def readImage(fp):
54 if hasattr(fp, 'read'):
55 return readData(fp)
56 return None
57  
58 
59  

 

posted on 2018-10-30 17:53  想喝猪肝汤  阅读(97)  评论(0)    收藏  举报