前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 小知识点(9)--反射

Python 小知识点(9)--反射

作者头像
wfaceboss
发布2019-04-08 10:40:19
2870
发布2019-04-08 10:40:19
举报
文章被收录于专栏:wfacebosswfaceboss

通过字符串映射或修改程序运行时的状态、属性、方法。有如下四个方法

1.hasattr(obj,name_str) , 判断一个对象obj里是否有对应的name_str字符串的方法

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

3.setattr(obj,'y',z), is equivalent to ``x.y = v''    obj是一个对象   y是一个对象中需要的属性  v 是y的值

4.delattr   is equivalent to ``del x.y''

实例代码如下:

代码语言:javascript
复制
'''
反射
    hasattr(obj,name_str) , 判断一个对象obj里是否有对应的name_str字符串的方法
    getattr(obj,name_str), 根据name_str字符串去获取obj对象里的对应的方法的内存地址
    setattr(obj,'y',z), is equivalent to ``x.y = v''
    delattr    is equivalent to ``del x.y''
'''
def bulk(self):
    print("%s is yelling...." %self.name)


class Dog(object):
    def __init__(self,name):
        self.name = name

    def eat(self,food):
        print("%s is eating..."%self.name,food)


d = Dog("TD")
choice = input(">>:").strip()

if hasattr(d, choice):
    haveFunc = getattr(d, choice)
    haveFunc("food")
else:
    setattr(d, choice, bulk) #若从控制台输入的字符串为talk此时此处等价于d.talk = bulk
    Add_func = getattr(d, choice)
    Add_func(d)

结论:反射是通过字符串的形式操作对象相关的成员。一切事物都是对象!!!

代码语言:javascript
复制
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档