反射机制

# -*- coding: utf-8 -*-

'''
调用Dog 中choice所存储字符串的方法

 hasattr(obj,str) 的作用是判断d这个实例中是否含有choice中所储存字符串的方法
 getattr(obj,str) 调用方法(getattr(d, choice) 的作用是获取到方法的内存地址,加上括号调用方法)
 setattr(obj,str,method) 为instance 添加新的方法/属性
 delattr(obj, str) 删除属性
'''

def bulk(self):
    print("%s is bulk" %self.name)

class Dog(object):
    def __init__(self,name):
        self.name = name
    
    def eat(self):
        print("%s is eating"  %self.name)
    
#     def

d = Dog("wangcai")
choice ="eat" #input(">>:").strip()
m2 = 'talk'
p = "name"


# hasattr 的作用是判断d这个实例中是否含有choice中所储存字符串的方法
print(hasattr(d, choice))

#调用方法(getattr(d, choice) 的作用是获取到方法的内存地址,加上括号调用方法)
getattr(d, choice)()
 
#为instance 添加新的方法
setattr(d, m2, bulk)
d.talk(d)

#删除属性
print(d.name)
delattr(d, p)
print(d.name)

 

动态导入:

# -*- coding: utf-8 -*-
'''
已知一个模块,比如 lib.aa (aa中有Test 方法), 但是以字符串的形式给出 , 我们可以通过动态导入的方式将这个模块进行导入
'''


#导入 lib.aa
mod = __import__("lib.aa")

#调用Test
mod.aa.Test()


#建议使用下边的这种方式
import importlib
lib = importlib.import_module('lib.aa')
lib.Test()

 

posted on 2017-11-29 16:14  gaizhongfeng  阅读(137)  评论(0)    收藏  举报