getattr() 指定一个方法名字,获取该方法的内存地址
hasattr() 判断一个方法是否存在于实例中
setattr() 设置或者添加方法
delattr() 删除方法
1、 getattr(obj, name) obj就是类的实例化(如果是调用函数的话,obj就是函数所在的包名), name就是方法名,需要注意方法名必须用引号引起来
2、备注: test0622中包含有f1 f2 f3三个函数,及person类,person类中有一个方法info
下边是练习
# coding utf-8
import test0622
# 调用test0622模块中的函数f3, 注意getattr的第一个参数是模块名,第二个参数是函数名,但是函数名需要以字符串的形式来传参
test1 = getattr(test0622, 'f3')
test1()
# 如何找到person类中的info方法,并且调用它(用反射的方法)
# 第一步类的是实例化
obj = test0622.Person()
# 判断person类中是否有info方法,如果找到就执行,如果没找到,输出未找到info
if hasattr(obj, 'info'):
f = getattr(obj, 'info')
f()
else:
print("未找到info")
# 设置或者添加类的内容
# 第一步类的是实例化
# 注意必须先实例化,如果直接写setattr(test0622.Person(), 'exit', 'this is exit method')会报错
# obj = test0622.Person() 上边已经有过实例化了,这个就不再写一次了
setattr(obj, 'exit', 'this is exit method')
# 第二步判断类里边是否有exit方法,hasattr返回true表示有,false表示无,exit并不会写入到person类,只是能调通
f = hasattr(obj, 'exit')
print(f)
# next学习下delattr
delattr(obj, 'exit')
f1 = hasattr(obj, 'exit')
# 输出false表示删除成功
print(f1)