zoukankan      html  css  js  c++  java
  • Python 的反射机制

    什么叫做反射

    利用字符串的形式去对象(模块)中操作(查找/添加/获取/删除)成员,一种基于字符串的事件驱动。

    可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。

    函数简介

    hasattr(*args, **kwargs):判断对象(模块)中某个函数或者变量是否存在
    setattr(x, y, v):给对象(模块)添加一个函数或变量
    getattr(object, name, default=None):获取对象(模块)中的一个函数或变量
    delattr(x, y):删除对象(模块)中的一个函数或变量
    
    可以通过 __import__ 方法来导入一个模块
    
    注:hasattr,setattr,delattr 对模块的修改都在内存中进行,并不会影响文件中真实内容
    

    实例

    __Author__ = "Lance#"
    
    # -*- coding = utf-8 -*-
    
    def default():
        print("This is a default function.")
    
    class Man():
        def __init__(self, name):
            self.__name = name
    
        def eat(self):
            print("%s is eating ...." % self.__name)
    
        def age(self):
            print("age is secret")
    
    if __name__ == '__main__':
        m = Man("Lance")
    
        while True:
            str = input("Please input:")
    
            if hasattr(m, str):
                func = getattr(m, str)
            else:
                setattr(m, str, default)
                func = getattr(m, str)
    
            func()
    
            try:
                delattr(m, str)
                print('Del attr OK')
            except:
                pass
                #print('Can not del method of a class or there is no this attr')
    

    运行结果

    Please input:age
    age is secret
    Please input:eat
    Lance is eating ....
    Please input:height
    This is a default function.
    Del attr OK
    

    delattr 使用注意事项

    1. 函数作用用来删除指定对象的指定名称的属性,和 setattr 函数作用相反
    2. 当属性不存在的时候,会报错
    3. 不能删除对象的方法
    
  • 相关阅读:
    Oracle Hint的用法
    利用flashback transaction query新特性进行事务撤销
    存储的一些基本概念(HBA,LUN)
    SAN和NAS
    SAN (Storage Attached Network),即存储区域网络
    深入浅出谈存储之NAS是什么
    对于NAS,IP SAN以及iSCSCI SAN存储的一些认识和理解
    Oracle的体系结构
    利用360免费wifi搭建局域网让他人访问Oracle数据库
    杭电ACM id:3783
  • 原文地址:https://www.cnblogs.com/GyForever1004/p/8973623.html
Copyright © 2011-2022 走看看