python中的反射工能使由四个内置函数提供 hasatrr(查出是否有某成员),getattr(获取成员), setattr(设置成员), delattr (删除成员)。
1 #-*-coding:utf-8 _*_
2 class reflect():
3 def __init__(self):
4 self.name = 'simple'
5 def Bar(self):
6 return 'Bar'
7 def func(self):
8 return 'func'
9
10 obj = reflect() #创建一个对象
11 #检查是否有改成员, 有返回True 否则返回False
12 hasattr(obj,"name")
13 print (hasattr(obj,"name"))
14 #获取该成员的信息
15 getattr(obj,"name")
16 print (getattr(obj,"name"))
17
18 #设置成员
19 setattr(obj,"age",22)
20 setattr(obj,"show",lambda num: num+1)
21
22 #删除成员 不能删除里面的方法比如Bar
23 delattr(obj,"age")
24 delattr(obj,"name")
详细解析: 当我们要访问一个对象的成员时,应该是这样操作 |
1 class Foo(object):
2 def __init__(self):
3 self.name = 'alex'
4 def func(slef):
5 return "func"
6 obj = Foo()
7
8 #访问字段
9 obj.name # 访问的是obj.name 变量名称
10 # 执行方法
11 obj.func() #访问obj.func 表示去obj中或类中寻找变量名,并获取对应内存地址中的内容
请使用其他方式获取obj对象中的name变量指向内存中的值 |
1 class Foo(object):
2 def __init__(self):
3 self.name = 'alex'
4 def func(slef):
5 return "func"
6 obj = Foo()
7 # 不允许使用obj.name
8 print(obj.__dict__["name"])
9
10 #第二种方式
11 print(getattr(obj,"name"))
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3
4 import sys
5
6
7 def s1():
8 print('s1')
9
10
11 def s2():
12 print('s2')
13
14
15 this_module = sys.modules[__name__]
16
17 hasattr(this_module, 's1')
18 getattr(this_module, 's2')
class Foo(object):
staticField = "old boy"
def __init__(self):
self.name = 'wupeiqi'
def func(self):
return 'func'
@staticmethod
def bar():
return 'bar'
print getattr(Foo, 'staticField')
print getattr(Foo, 'func')
print getattr(Foo, 'bar')
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
程序目录:
home.py
index.py
home.py:
def dev():
return 'dev'
当前文件:
index.py
"""
import home as obj
#obj.dev()
func = getattr(obj, 'dev')
func()