getattr、setattr、hasattr都是python的内置函数。

getattr(obj,key)—— 获取类或类实例中的属性值,没有则会报错!!!

setattr(obj,key,value) ——  给类设置属性值!!!

hasattr(obj,key) —— 检查类或者类实例是否有这个属性

参数:

obj:对象

key:对象中的属性

value:对象属性值

 

getattr

1、获取实例对像中的实例属性

class Person(object):
def __init__(self,name):
self.name = name
p = Person('lxc')
r = getattr(p,'name')
print(r) # lxc

2、获取类中的类属性

class Person(object):
name = '吕星辰'
def __init__(self):
pass
p = Person()
r = getattr(p,'name')
print(r) # 吕星辰

 

setattr

1、动态设置类属性

下边代码,定义了一个类属性name,然后动态添加了一个类属性,打印实例属性是动态添加的属性值instanceName,动态添加的类属性会覆盖原有的类属性!!!

class Person(object):
name= 'className'
def __init__(self):
pass
@classmethod
def c(cls):
print(cls.name) #instanceName
p = Person()
setattr(Person,'name','instanceName')
p.c()

 

hasattr

检查类中是否有这个类属性或者类方法:

class Person():
def fn(self):
pass
P = Person()
print(hasattr(Person,'fn')) # True
class Person():
name = 'lxc'
P = Person()
print(hasattr(Person,'name')) # True