在python中使用反射(reflection)

反射在编程语言中变广泛的应用,java和php都提供专门的类库,对反射有很好的支持,而python,仿佛天生就支持了反射。

反射是在只知道类名或者函数名的情况下调用其对应的函数。广泛应用于:

  1. 配置文件。
  2. 路由。

例子1:通过import实现

module = __import__('person')
if hasattr(module, 'Person'):
    person_cls = getattr(module, 'Person')
    one_person = person_cls()
    if hasattr(one_person, 'walk'):
        func = getattr(one_person, 'walk')
        func()
    else:
        raise Exception('method not exists')
else:
    raise Exception('no cls exists')

例子2:通过globals()实现

from person import Person

p = globals()['Person']()
p.walk()

主要方法介绍

class Dog(object):

    def __int__(self, name):
        self.name = name

    def eat(self, food):
        print('I love eat '+food)


dog = Dog()
if hasattr(dog, 'name'):
    func = getattr(dog, 'name')
    func()

if not hasattr(dog, 'leg'):
    setattr(dog, 'leg',4)

print(dog.leg)#4

例子:路由

class Dog(object):

    def __int__(self, name):
        self.name = name

    def eat(self, food):
        print('I love eat '+food)

def rout(url):
    urls = url.split("&")
    map = {}
    for uri in urls:
        u = uri.split('=')
        map[u[0]] = u[1]
    obj = globals()[map.get('cls')]()
    func = getattr(obj, map.get('method'))
    func(map.get('value'))#I love eat meat

rout("cls=Dog&method=eat&value=meat")

http://www.cnblogs.com/yyyg/p/5554111.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,111评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,084评论 19 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,639评论 4 61
  • 1爱与独立 付出真爱,需要把爱的对象看作独立的个体。如果不把别人看成独立的个体,无视别人的独立和自由,就会给自身带...
    扫地_阅读 3,130评论 9 11
  • 使用这个方法的原因是因为,我的应用创建了一个.MP4的文件,能在文件管理中找到该文件,但是在图库中并不能及时的刷...
    Easyrealjs阅读 8,166评论 0 3

友情链接更多精彩内容