python的反射机制

一、什么是反射

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

可使用反射的地方:

1、反射类中的变量 : 静态属性,类方法,静态方法
2、反射对象中的变量、对象属性、普通方法
3、 反射模块中的变量
4、反射本文件中的变量

getattr(核心)

判断类、对象或者模块中是否有相应的属性或方法。用法:getattr(obj,str,default=None) 判断obj中是否有str属性,有就返回,没有时有传入第三参数就返回第三参数,没有就报错。

 class A:
    name = 'zs'
    age = 18
print(getattr(A,'name'))
print(getattr(A,'language','notfound'))

 

 

 

settattr

设置属性。第三参数为新的属性值

class A:
    name = 'zs'
    age = 18
setattr(A,'name','ls')
setattr(A,'language','Chinese')
print(getattr(A,'name'))
print(getattr(A,'language','notfound'))

 

 

 

hasattr

判断时候有某个属性,有就返回True,没有就返回False

class A:
    name = 'zs'
    age = 18
if hasattr(A,'name'):
    print(getattr(A,'name'))

 

delattr

删除某个属性

class A:
    name = 'zs'
    age = 18

delattr(A,'name')
print(hasattr(A,'name'))

 

python的四个重要内置函数:getattrhasattrdelattrsetattr较为全面的实现了基于字符串的反射机制。他们都是对内存内的模块进行操作,并不会对源文件进行修改。 

 

反射本文件

sys.modulses[__ name__]就是本文件对象。

import sys
class A:
    def __repr__(self):
        return '666'
if hasattr(sys.modules[__name__],'A'):
    print(getattr(sys.modules[__name__],'A')())

 

posted @   小七Libra  阅读(254)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示