当前位置: 代码网 > it编程>前端脚本>Python > Python教程: 反射及常用的几种方法

Python教程: 反射及常用的几种方法

2024年05月21日 Python 我要评论
反射就是通过字符串映射或修改程序运行时的状态、属性、方法 有四个常用方法: hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法 getattr(obj,name_str) 根据字符串name_str获取Obj对象中对应方法的内存地址 setattr(obj ...

反射就是通过字符串映射或修改程序运行时的状态、属性、方法

有四个常用方法:

  • hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法

  • getattr(obj,name_str) 根据字符串name_str获取obj对象中对应方法的内存地址

  • setattr(obj,key,value) 为对象obj新增或修改属性或者方法

  • delattr(obj,name_str) 删除对象obj中名为name_str的属性或者方法

反射demo举例:

#!/usr/bin/env python
# _*_ coding:utf-8 _*_

'''
hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法
getattr(obj,name_str) 根据字符串name_str获取obj对象中对应方法的内存地址
setattr(obj,key,value) 为对象obj新增或修改属性或者方法
delattr(obj,name_str) 删除对象obj中名为name_str的属性或者方法
'''
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 %s"%(self.name,food))
 
jim=dog("jim")
choise=input(">>输入需要执行的操作:").strip()
if hasattr(jim,choise):
    func=getattr(jim,choise)
    func("巧克力")
    #delattr(jim,choise)
else:
	#python学习交流群:153708845
    #动态装配一个方法 choise为方法名,bulk为方法的内存地址
    setattr(jim,choise,bulk)
    # 调用时用转配的方法名,即传入的choise值,这里需要传入对象本身
    getattr(jim,choise)(jim)
    #动态装配一个属性,也可以修改属性
    setattr(jim,choise,"新装配的属性")
    print(getattr(jim,choise))
#print(jim.name)
#jim.eat("狗粮")
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com