zoukankan      html  css  js  c++  java
  • Python 反射

     
    反射的使用

     

    反射(一)

    hasattr(obj,name_str):判断一个对象里是否有对应的字符串的方法。

    getattr(obj,name_str):根据字符串获取obj对象里的对应的方法的内存地址。

    setattr(obj,'y',v): 给对象添加新的属性。"x.y = v" :obj是对象,y字符串,v方法,属性。

    delattr(obj,y):删除对象下的变量,可以以字符串形式删除。

     

    例子

    #hasattr判断choice是否是d对象可调用的方法
    #hasattr(d,choice)
    
    #getattr可同过choice变量传入的字符串,传给d的内存地址
    #getattr(d,choice)
    
    #getattr 加括号调用内存地址
    #getattr(d,choice)()
    
    #删除d对象下的字符串赋值的变量。
    #delattr(d,choice)
    
    #可执行方法属性,动态的将字符串bulk方法赋值给choice
    #setattr(d,choice,bulk)
    #d.choice(d)
    def bulk(self):
        print("%s is yelling.."%self.name)
    
    class Dog(object):
    
        def __init__(self,name):
            self.name = name
    
        def eat(self,food):
            print("%s is eating %s"%(self.name,food))
    
    d = Dog("NiuHanYang")
    choice = input(">>:").strip()
    
    #结合使用
    if hasattr(d,choice): #判断是可执行方法。
       func = getattr(d,choice) #可能要传入参数,先传入值。
       func("chenRonghua")
    else:
         #setattr(对象,字符串,方法属性)
         setattr(d,choice,bulk)
         d.talk(d)
    
         #可将字符串转为22属性,赋值给字符串choice。
         setattr(d,choice,22)
         print(getattr(d,choice))

    反射(二)

    反射的灵活应用

    #setattr赋值方法,进行转换,getattr进行执行字符串。
    setattr(d,choice,bulk) #d.talk = bulk内存地址
    func = getattr(d,choice)
    func(d)
  • 相关阅读:
    mybatis映射文件配置-1对多
    启动服务器加载spring.xml:web.xml配置
    spring-mybatis.xml配置文件
    json转换器映射文件配置
    Restful levels
    事务隔离级别「脏读、不可重复读、幻读」
    Java CDI
    session和Cookie的介绍和应用
    java RE Validation常用
    hello2 source Analysis
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/7831826.html
Copyright © 2011-2022 走看看