Python 的反射机制

Python反射机制详解
本文深入介绍了Python中的反射机制,包括如何使用字符串动态操作对象的成员,例如查找、添加、获取和删除成员。同时,提供了hasattr、setattr、getattr和delattr等函数的具体应用实例。

什么叫做反射

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

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

函数简介

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. 不能删除对象的方法

转载于:https://www.cnblogs.com/GyForever1004/p/8973623.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值