Python 反射

Python反射

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

  - 通常用于框架或库的开发。

反射的4个方法

  hasattr (常用)    判断对象(属性或方法)是否存,返回布尔值

  getattr (常用)    获取对象(属性或方法),返回对象方法的内存地址

  setattr          设置对象(属性或方法)

  delattr          删除对象(属性或方法)

# hasattr(object, name)

  判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False。

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

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

obj = Dog("alex")
print(hasattr(obj, "name"))
print(hasattr(obj, "eat"))


>>> True True

# getattr(object, name[,default])  获取对象object的属性或者方法,如果存在打印出来,如果不存在,打印出默认值,默认值可选。  需要注意的是,如果是返回的对象的方法,返回的是方法的内存地址,如果需要运行这个方法,可以在后面添加一对括号。

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

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


obj = Dog("alex")
print(getattr(obj, "name"))
print(getattr(obj, "age", 38)) #若属性不存在,则返回一个默认值
getattr(obj, "eat")()
>>>
alex
38
alex is eating...

# setarrt(obj, y, v)

  将函数装配到obj类中成为类方法。

def setattr(x, y, v): # real signature unknown; restored from __doc__
    """
    Sets the named attribute on the given object to the specified value.
    
    setattr(x, 'y', v) is equivalent to ``x.y = v''
    """
    pass

--------------------------------------------------------

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

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

obj = Dog("alex")
getattr(obj, "age", setattr(obj, "age", 38))  # 若getarrt无法获取“age”, 就使用setattr创建"age"
print(obj.age)

>>>
38

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值