博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 反射机制
阅读量:5259 次
发布时间:2019-06-14

本文共 2131 字,大约阅读时间需要 7 分钟。

 反射也叫路由系统,就是通过字符串的形式导入模块;通过字符串的形式去模块中寻找指定的函数,并执行,利用字符串的形式去对象(模块)中操作(查找、获取、删除、添加)成员,一种基于字符串的时间驱动。

 

获取:(getattr:获取或执行对象中的对象)

1 class NameList(): 2     def __init__(self,name,age): 3         self.name = name 4         self.age = age 5  6     def Show(self): 7         print("My name is %s and I'm %d years old" %(self.name,self.age)) 8  9 obj = NameList("Adair",18)10 # obj.Show()11 UserInput=input(">>>")12 print(getattr(obj,UserInput))13 14 >>>name15 Adair16 17 >>>age18 1819 20 >>>Show21 
>

 

1 getattr 调用函数: 2 class NameList(): 3     def __init__(self,name,age): 4         self.name = name 5         self.age = age 6  7     def Show(self): 8         print("My name is %s and I'm %d years old" %(self.name,self.age)) 9 10 obj = NameList("Adair",18)11 # obj.Show()12 UserInput=input(">>>")13 Get = getattr(obj,UserInput)14 Get()15 16 >>>Show17 My name is Adair and I'm 18 years old

 

查找:(hasattr:判断方式是否存在与对象中)

1 class NameList(): 2     def __init__(self,name,age): 3         self.name = name 4         self.age = age 5  6     def Show(self): 7         print("My name is %s and I'm %d years old" %(self.name,self.age)) 8  9 obj = NameList("Adair",18)10 UserInput=input(">>>")11 print(hasattr(obj,UserInput))12 13 >>>name14 True15 16 >>>Show17 True18 19 >>>Adair20 False

添加/修改(setattr

class NameList():    def __init__(self,name,age):        self.name = name        self.age = age    def Show(self):        print("My name is %s and I'm %d years old" %(self.name,self.age))obj = NameList("Adair",18)InputKey=input(">>>")InputValue=input(">>>")New = setattr(obj,InputKey,InputValue)print(getattr(obj,InputKey))>>>salary>>>100000100000>>>name>>>xiaoheixiaohei

 

删除:(delattr)

1 class NameList(): 2     def __init__(self,name,age): 3         self.name = name 4         self.age = age 5  6     def Show(self): 7         print("My name is %s and I'm %d years old" %(self.name,self.age)) 8  9 obj = NameList("Adair",18)10 UserInput=input(">>>")11 delattr(obj,UserInput)12 print(hasattr(obj,UserInput))13 14 >>>name15 False

 

注:getattr,hasattr,setattr,delattr对模块的修改都在内存中进行,并不会影响文件中真实内容。

转载于:https://www.cnblogs.com/Adairye/p/9643824.html

你可能感兴趣的文章
让IE浏览器支持CSS3圆角属性的方法
查看>>
巡风源码阅读与分析---nascan.py
查看>>
LiveBinding应用 dataBind 数据绑定
查看>>
Linux重定向: > 和 &> 区别
查看>>
nginx修改内核参数
查看>>
C 筛选法找素数
查看>>
TCP为什么需要3次握手与4次挥手(转载)
查看>>
IOC容器
查看>>
Windows 2003全面优化
查看>>
URAL 1002 Phone Numbers(KMP+最短路orDP)
查看>>
web_day4_css_宽度
查看>>
electron入门心得
查看>>
格而知之2:UIView的autoresizingMask属性探究
查看>>
我的Hook学习笔记
查看>>
js中的try/catch
查看>>
寄Android开发Gradle你需要知道的知识
查看>>
简述spring中常有的几种advice?
查看>>
整理推荐的CSS属性书写顺序
查看>>
ServerSocket和Socket通信
查看>>
css & input type & search icon
查看>>