我是靠谱客的博主 调皮野狼,最近开发中收集的这篇文章主要介绍python的反射概念、理解和基本使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是反射

反射是一个很重要的概念,它可以把字符串映射到实例的变量或者实例的方法然后可以去执行调用、修改等操作。
下面是反射的四个基本方法:

  • getattr 获取指定字符串名称的对象属性
  • setattr 为对象设置一个对象
  • hasattr 判断对象是否有对应的对象(字符串)
  • delattr 删除指定属性

使用

在test.py中创建三个函数

def A():
    print('我是A')

def B():
    print('我是B')

def C():
    print('我是C')

在同级目录下的testtest.py中导入

import test as H

H.A()
H.B()
H.C()

很普通的调用方法肯定没有问题执行结果:

我是A
我是B
我是C

需求一:想要用户输入模块进行调用方法
使用__import__(模块名) 就可以根据字符串来寻找相应的模块并导入

input = input('请输入导入的模块名')
H = __import__(input)

H.A()
H.B()
H.C()

执行结果:

请输入导入的模块名test
我是A
我是B
我是C

需求二:现在还想输入方法名来,调用相应的方法
这时候呢就可以用到反射函数中的getattr 来根据字符串来获取相应的方法

he = input('请输入导入的模块名')
H = __import__(he)

method = input('请输入模块名')
getattr(H,method)()
# getattr()   # 参数一 去找的模块 参数二 去找的方法名

判断输入的是否是模块中具有的

he = input('请输入导入的模块名')
H = __import__(he)

method = input('请输入模块名')
if hasattr(H,method):
    getattr(H,method)()
else:
    print('404')
# hasattr   参数一 去找的模块 参数二 去找的方法

打印结果

请输入导入的模块名test
请输入模块名D
404

给模块中添加相应方法

he = input('请输入导入的模块名')
H = __import__(he)

method = input('请输入模块名')
setattr(H,method,lambda :print('我是D'))
if hasattr(H,method):
    getattr(H,method)()
else:
    print('404')
# setattr  参数一 去找的模块 参数二 方法名  参数三 方法

打印结果

请输入导入的模块名test
请输入模块名D
我是D

删除模块中的相应的方法

he = input('请输入导入的模块名')
H = __import__(he)

method = input('请输入模块名')
setattr(H,method,lambda :print('我是D'))
delattr(H,method)
if hasattr(H,method):
    getattr(H,method)()
else:
    print('404')

打印结果:

请输入导入的模块名test
请输入模块名D
404

1----getattr():
作用: 去指定对象中去寻找相应的方法

2----hasattr():

作用:判断指定对象中是否含有指定成员,有则返回True,否则返回False。

3----setattr():

作用:给指定对象添加指定成员

4----delattr():

作用:删除指定对象中的指定成员

总结

简单来说就是你可以利用字符串来映射模块中的相应方法然后可以操作模块中相应的方法。(个人理解)

参考链接:https://www.cnblogs.com/rexcheny/p/9498091.html

最后

以上就是调皮野狼为你收集整理的python的反射概念、理解和基本使用的全部内容,希望文章能够帮你解决python的反射概念、理解和基本使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部