zoukankan      html  css  js  c++  java
  • Python 小知识点(9)--反射

    通过字符串映射或修改程序运行时的状态、属性、方法。有如下四个方法

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

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

    3.setattr(obj,'y',z), is equivalent to ``x.y = v''    obj是一个对象   y是一个对象中需要的属性  v 是y的值

    4.delattr   is equivalent to ``del x.y''

    实例代码如下:

    '''
    反射
        hasattr(obj,name_str) , 判断一个对象obj里是否有对应的name_str字符串的方法
        getattr(obj,name_str), 根据name_str字符串去获取obj对象里的对应的方法的内存地址
        setattr(obj,'y',z), is equivalent to ``x.y = v''
        delattr    is equivalent to ``del x.y''
    '''
    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..."%self.name,food)
    
    
    d = Dog("TD")
    choice = input(">>:").strip()
    
    if hasattr(d, choice):
        haveFunc = getattr(d, choice)
        haveFunc("food")
    else:
        setattr(d, choice, bulk) #若从控制台输入的字符串为talk此时此处等价于d.talk = bulk
        Add_func = getattr(d, choice)
        Add_func(d)

     结论:反射是通过字符串的形式操作对象相关的成员。一切事物都是对象!!!

    
    
  • 相关阅读:
    Mysql事务隔离级
    51nod1076(tarjan)
    求无向图的割点和桥模板(tarjan)
    51nod1770(xjb)
    51nod1640(kruscal)
    51nod1639(组合数学)
    51nod1625(枚举&贪心)
    51nod1562(set&模拟)
    51nod1483(打表)
    51nod1475(贪心&枚举)
  • 原文地址:https://www.cnblogs.com/wfaceboss/p/9454126.html
Copyright © 2011-2022 走看看