什么是反射
发射主要指程序可以访问、检测和修改它本身状态或者行为的一种能力(自省),就是通过字符串的形式导入模块,通过字符串的形式去模块中寻找指定的函数并执行
4个内置函数
getattr(strObject, attr [,default])
返回指定字符串strObject的属性或方法'attr',如果有属性则返回该属性的值,
如果有方法则返回该方法的内存地址,如果都没有报错。
如果指定了默认值且都没有,则返回该默认值。
hasattr(strObject, attr)
判断指定字符串strObject对象是否有该属性或方法'attr',返回True/False
setattr(strObject, attr, value)
为指定字符串strObject对象设置属性attr的值,如果对象已有尬属性的值则修改原值,
如果没有该属性则新增属性并赋值
delattr(strObject, attr)
删除指定字符串strObject对象的属性attr,如果没有该属性则报错。
class People:
def __init__(self, name, age):
self.name = name
self.age = age
p = People("尘世风", 18)
print(hasattr(p, "name")) # True
print(getattr(p, "age")) # 18
print(getattr(p, "hobby", None)) # 获取不到属性,返回设定值
setattr(p, "hobby", "Python") # 无则增,有则改
print(getattr(p, "hobby", None)) # Python
delattr(p, "hobby")
print(getattr(p, "hobby", None)) # None
# 类也可以说是对象
# print(hasattr(类,'类的属性/方法'))
print(hasattr(list,'append')) # True