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")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值