• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
程序员日志
博客园    首页    新随笔    联系   管理    订阅  订阅

python 反射

     在做程序开发过程中个,我们需要执行对象里面的某个方法,或者调用对象中的某个变量,当由于我们无法确定这个方法或变量是否存在,

 这时我们就需要一个特殊的方法或机制要访问或操作这个方法或变量,这种机制就就叫做反射

hasattr(obj,name_str)  判断obj对象中是否有对应的name_str字符串的方法(其中obj为对象名,name_str为字符串)

getattr(obj,name_str)   根据字符串name_str去获得obj对象里对应的方法的内存地址

 

 1 class Person(object):
 2     def __init__(self,name):
 3         self.name = name
 4     def talk(self):
 5         print("%s正在交谈"%self.name)
 6 
 7 p = Person("laowang")        
 8 print(hasattr(p,"talk"))    # True。因为存在talk方法
 9 print(hasattr(p,"name"))    # True。因为存在name变量
10 print(hasattr(p,"abc"))     # False。因为不存在abc方法或变量
11 
12 ---------------------
View Code

 setattr(obj,'name_str',abc)  为obj对象添加abc方法或变量并命名为name_str

 1 def abc(self):
 2     print("%s正在交谈"%self.name)
 3 
 4 class Person(object):
 5     def __init__(self,name):
 6         self.name = name
 7 
 8 p = Person("laowang")
 9 setattr(p,"talk",abc)   # 将abc函数添加到对象中p中,并命名为talk
10 p.talk(p)               # 调用talk方法,因为这是额外添加的方法,需手动传入对象
11 
12 
13 setattr(p,"age",30)     # 添加一个变量age,复制为30
14 print(p.age)            # 打印结果:30
15 
16 ---------------------
View Code

delattr(obj,'name_str')   删除obj对象中的变量name_str  ,注意不能用于删除方法

 1 class Person(object):
 2     def __init__(self,name):
 3         self.name = name
 4     def talk(self):
 5         print("%s正在交谈"%self.name)
 6 
 7 p = Person("laowang")
 8 
 9 delattr(p,"name")       # 删除name变量
10 print(p.name)           # 此时将报错
11 
12 ---------------------
13 
14 本文来自 喷跑的豆子 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/y472360651/article/details/73277957?utm_source=copy 
View Code

 

本章博客由作者刘少辉著写
posted @ 2018-10-09 10:13  程序小霸王  阅读(176)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3