1,使用系统函数__import_()
stringmodule = __import__('string')
2,使用imp 模块
import imp
stringmodule = imp.load_module('string',*imp.find_module('string'))
imp.load_source("TYACMgrHandler_"+app.upper(), filepath)
import_string = "import string as stringmodule"
exec import_string
变量是否存在
1,hasattr(Test,'t')
2, 'var' in locals().keys()
3,'var' in dir()
4,vars().has_key('s')
动态增加属性
class Obj(object):
def main():
if __name__ == '__main__':
动态载入包
print s
print e
class C ():
def __init__( self , name ):
print name
def test( self ):
print 'class!!!'
加载器代码:
class Dynload ():
def __init__( self , package , imp_list ):
self . package = package
self . imp = imp_list
def getobject( self ):
return __import__( self . package , globals (), locals (), self . imp , - 1)
def getClassInstance( self , classstr , * args ):
return getattr( self . getobject (), classstr)( * args)
def execfunc( self , method , * args ):
return getattr( self . getobject (), method)( * args)
def execMethod( self , instance , method , * args ):
return getattr( instance , method)( * args)
#Test:
dyn = Dynload( 'util.common' ,[ '*' ])
ins = dyn . getClassInstance( 'C' , 'gao')
dyn . execMethod( ins , 'test')
dyn . execfunc( 'test' , 'Hello' , 'function!')
根据名字加载指定文件
def loadapp(self, app):
filepath="mgr/"+app+".py"
if os.path.exists(filepath):
imp.load_source("TYACMgrHandler_"+app.upper(), filepath)
//修改了app.py,从新调用这个函数,新的代码自动生效
根据名字调用对应方法
return getattr(self, op)(args.get("port"), args) //op="start" args=dict
getattr(self, self.request.method.lower())(*args, **kwargs)