python和java反射_python实现反射功能

在java中用classfor 很容易实现反射,比如SPRING,就大量用这个东西实现。现在用python做服务端,也想用类似的方式。在搜索了大量的网站后,找到一个classloader方案,源代码,例子如下。'''

Created on 2012-2-16

@author: Administrator

'''

import sys, types,new

def _get_mod(modulePath):

try:

aMod = sys.modules[modulePath]

if not isinstance(aMod, types.ModuleType):

raise KeyError

except KeyError:

# The last [''] is very important!

aMod = __import__(modulePath, globals(), locals(), [''])

sys.modules[modulePath] = aMod

return aMod

def _get_func(fullFuncName):

"""Retrieve a function object from a full dotted-package name."""

# Parse out the path, module, and function

lastDot = fullFuncName.rfind(u".")

funcName = fullFuncName[lastDot + 1:]

modPath = fullFuncName[:lastDot]

aMod = _get_mod(modPath)

aFunc = getattr(aMod, funcName)

# Assert that the function is a *callable* attribute.

assert callable(aFunc), u"%s is not callable." % fullFuncName

# Return a reference to the function itself,

# not the results of the function.

return aFunc

def _get_Class(fullClassName, parentClass=None):

"""Load a module and retrieve a class (NOT an instance).

If the parentClass is supplied, className must be of parentClass

or a subclass of parentClass (or None is returned).

"""

aClass = _get_func(fullClassName)

# Assert that the class is a subclass of parentClass.

if parentClass is not None:

if not issubclass(aClass, parentClass):

raise TypeError(u"%s is not a subclass of %s" %

(fullClassName, parentClass))

# Return a reference to the class itself, not an instantiated object.

return aClass

def applyFuc(obj,strFunc,arrArgs):

objFunc = getattr(obj, strFunc)

return apply(objFunc,arrArgs)

def getObject(fullClassName):

clazz = _get_Class(fullClassName)

return clazz()

if __name__=='__main__':

aa=getObject("inetservices.services.company.Company")

bb=applyFuc(aa, "select", ['select * from ngsys2',None])

print bb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值