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

    Python反射

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

      - 通常用于框架或库的开发。

    反射的4个方法

      hasattr (常用)    判断对象(属性或方法)是否存,返回布尔值

      getattr (常用)    获取对象(属性或方法),返回对象方法的内存地址

      setattr          设置对象(属性或方法)

      delattr          删除对象(属性或方法)

    # hasattr(object, name)

      判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False。

    class Dog(object):
        def __init__(self, name):
            self.name = name
    
        def eat(self):
            print("%s is eating..." % self.name)
    
    obj = Dog("alex")
    print(hasattr(obj, "name"))
    print(hasattr(obj, "eat"))
    

    >>> True True

     

    # getattr(object, name[,default])
      获取对象object的属性或者方法,如果存在打印出来,如果不存在,打印出默认值,默认值可选。
      需要注意的是,如果是返回的对象的方法,返回的是方法的内存地址,如果需要运行这个方法,可以在后面添加一对括号。

    class Dog(object):
        def __init__(self, name):
            self.name = name
    
        def eat(self):
            print("%s is eating..." % self.name)
    
    
    obj = Dog("alex")
    print(getattr(obj, "name"))
    print(getattr(obj, "age", 38)) #若属性不存在,则返回一个默认值
    getattr(obj, "eat")()
    >>>
    alex
    38
    alex
    is eating...

    # setarrt(obj, y, v)

      将函数装配到obj类中成为类方法。

    def setattr(x, y, v): # real signature unknown; restored from __doc__
        """
        Sets the named attribute on the given object to the specified value.
        
        setattr(x, 'y', v) is equivalent to ``x.y = v''
        """
        pass
    
    --------------------------------------------------------
    
    class Dog(object):
        def __init__(self, name):
            self.name = name
    
        def eat(self):
            print("%s is eating..." % self.name)
    
    obj = Dog("alex")
    getattr(obj, "age", setattr(obj, "age", 38))  # 若getarrt无法获取“age”, 就使用setattr创建"age"
    print(obj.age)
    
    >>>
    38

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

  • 相关阅读:
    学习流程
    Linux计划任务 定时任务 Crond 配置详解 crond计划任务调试 sh x 详解 JAVA脚本环境变量定义
    asp.net 将Excel中某个工作簿的数据导入到DataTable方法
    在浏览器输入url,发生了什么?BSC结构图(百度搜索关键字发生了什么?)
    在C#中使用属性控件添加属性窗口
    转载:面向对象在数据库应用程序中的应用(dotNet)
    中国软件:10个人20年坎坷路
    客户端回调
    鼠标放在图片连接上面,预览图片
    一个合格的程序员该做的事情
  • 原文地址:https://www.cnblogs.com/vincenshen/p/6080424.html
Copyright © 2011-2022 走看看