反射:通过字符串操作属性

##反射:
# 通过字符串来操作对象的属性或方法
##举例
class User:
school = 'oldgirl'
def __init__(self,name,age):
self.name = name
self.age = age
def func(self):
print('func')

# 1.hasattr判断对象是否有某个属性或方法

print(User.school)
print('school' in User.__dict__)
print('xxx' in User.__dict__)
print(hasattr(User,'school'))
print(hasattr(User,'xxx'))
print(hasattr(User,'func'))
print('func' in User.__dict__)

print('==========================================')
##2,如果对象有某个属性,获取某个属性的值
# getattr

d = {'name':"jason"}
print(d.get('password','hahahahahaha'))
#
# getattr
print(getattr(User,'school'))
print(getattr(User,'func'))
print(User.__dict__['school'])
print(User.__dict__['func'])

# print(getattr(User,'xxx')) 需要注意的是:如果没有这个属性,用get 就会报错,所以要先判断一下
if hasattr(User,'xxx'):
getattr(User,'xxx')

print('==========================================')
##现在要修改设置一个对象中的属性
# setattr
obj = User('jason',18)
setattr(obj,'gender','male') # obj.gender = 'male'
print(obj.__dict__)


print('==========================================')
##现在要删除一个对象中的属性
# delattr
delattr(User,'school')
print(User.__dict__)








posted @ 2019-05-31 23:18  同济小孙  阅读(387)  评论(0编辑  收藏  举报