获取对象的信息之反射
所谓反射,指的是以字符串额形式来操作(包括:增删改查)对象的属性和方法。
-
hasattr(object, name)
用于判断指定的对象object是否有参数name指定的属性和方法
-
getattr(object, name[, default])
用于获取指定的对象object中名为name的属性和方法
如果不指定参数default,那么当object中不存在名为name的属性和方法时抛出AttributeError
如果指定了参数default,那么当object中不存在名为name的属性和方法时就会返回default
getattr(object, name)等价于:object.name
-
setattr(object, name, value)
用于在指定的对象object中添加或修改名为参数name的属性和方法,添加或修改后的值为value
setattr(object, name, value)等价于object.name = value
-
delattr(object, name)
用于删除指定的对象object中名为参数name的属性或方法
delattr(object, name)等价于:del object.name
注意: 只有在不知道对象信息的情况下,才会去获取对象信息。因此,如果可以直接写:object.name,
就不要写为getattr(object, 'name')。
class Myclass(object): def __init__(self): self.x = 1 def do_sth(self): print("do_sth被调用") mc = Myclass() print(hasattr(mc, 'x')) # True print(hasattr(mc, "do_sth")) # True print(hasattr(mc, 'y')) # False print(getattr(mc, 'x')) # 1 f = getattr(mc, 'do_sth') f() # print(getattr(mc, 'y'))#AttributeError print(getattr(mc, 'y', 2)) setattr(mc, 'z', 3) print(getattr(mc, 'z')) setattr(mc, 'z', 4) print(mc.z) delattr(mc, 'z') print(hasattr(mc, 'z'))