class Foo: def __init__(self,name,age): self.name = name self.age = age def show(self): return '%s-%s'%(self.name,self.age) foo = Foo('lroyle',18) # print(type(foo.name)) # b = 'name' # print(foo.__dict__[b]) # # if b == 'name': # print(foo.name) b = 'name' # 以字符串的形式取成员 name = getattr(foo,b) print(name) func = getattr(foo,'show') print(func) fc = func() print(fc) # lroyle-18 print(hasattr(foo,'name')) # True setattr(foo,'k1','v1') print(foo.k1) # v1 delattr(foo,'name') # print(foo.name)
反射在模块级别的使用
v005.py
NAME = 'lroyle'
def func():
return 'func'
class Foo:
def __init__(self):
self.name = 123
aaa.py
import v005
# r1 = v005.NAME;
# print(r1) # lroyle
# r2 = v005.func()
# print(r2) # func
r1 = getattr(v005,'NAME')
print(r1)
r2 = getattr(v005,'func')
result = r2()
print(result)
cls = getattr(v005,'Foo')
print(cls) # <class 'v005.Foo'>
foo = cls()
print(foo) # <v005.Foo object at 0x10c9da9b0>
print(foo.name) # 123