Python---反射ttr

反射:通过字符串映射或修改程序运行时的状态,属性,方法。

4个函数:getattr(),hasattr(),setattr(),delattr()

用法如下:

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("Sun")
choice=input(">>:").strip()  #choice为字符串形式
#print(hasattr(d,choice))    #hasattr(obj,name_str)判断一个对象obj里是否有name_str方法
if hasattr(d,choice):
    delattr(d,choice)    #delattr(obj,name_str)  删除obj对象中的name_str属性
    func = getattr(d,choice)  #getattr(obj,name_str)获取对象objname_str方法的内存地址(如果有)
    #print(func)
    setattr(d,choice,"Xiao")   #改名
    #func("HEHE")   #func就相当于eat
else:
    # setattr(d,choice,bulk)   #setattr(obj,name_str1,name_str2)把位于obj对象外的name_str2方法加进obj对象中(动态装一个方法)  obj.name_str1=name_str2
    # d.talk(d)   #talkname_str1
    # print(d.name)
    # setattr(d,choice,None)   #动态装一个静态属性 d.choice=None
    # print(getattr(d,choice))
    setattr(d,choice,150000)
    print(getattr(d,choice))  #getattr(d,choice)如果是一个方法,则返回内存地址;如果是一个不存在的静态属性,则直接返回值)
print(d.name)   #改名测试
d.eat("Monkey")

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页