目录
1.issubclass()
概念
检测一个类是否是另外一个类的子类
格式1:issubclass(被检测类,父类)
返回值:布尔值
格式1:issubclass(被检测类,(父类1,父类2,父类3...))
返回值:布尔值
注意:只要有一个类是当前被检测类的父类,那么最终结果就是True
练习
2.isinstance()
概念
检测一个对象是否是某个类的对象
格式1:isinstance(对象,类)
返回值:布尔值
格式2:isinstance(对象,(类1,类2,类3...))
返回值:布尔值
注意:只要一个类是当前对象的类,那么最终结果就是True
练习
3.反射方法
python面向对象中的反射:通过字符串的形式操作对象相关的属性
python中的一切事物都是对象(都可以使用反射)
四个反射相关的函数
-hasattr :判断是否有此变量,返回bool 值
-getattr : 获取属性值或者获取方法变量的地址
-setattr :给类或者对象设置属性或者方法 (用的场合很少,了解即可)
-delattr: 删除类或者对象的属性或方法(用的场合很少,了解即可)
getattr()
获取对象/类中的成员值
格式:getattr(对象,'属性名'[,成员不存在时的默认值])
返回值:成员的值
练习1
获取静态方法和类方法
结果
练习2
获取对象的属性值和普通方法
hasattr()
检测对象/类是否具有某个成员
格式:hasattr(对象/类,'成员名')
返回值:布尔值
练习1
判断类中是否有dict1静态属性
练习2
根据用户输入的key来调用对应的方法
setattr()
设置或者添加对象/类中的成员
格式:setattr(对象,'成员名',值)
返回值:None
练习1
给A类添加静态age属性
练习2
给A类的对象添加name属性
delattr()
删除对象/类中的成员
格式: delattr(对象,成员)
返回值:None
练习1
删除a对象的name属性
练习2
删除 A类的age属性
反射导入模块中的属性、函数、类
第一个参数是模块名称,第二个参数是变量名称
练习1
反射test模块中的属性、函数和类
test.py
demo.py
结果
练习2
反射带参数的函数
反射自己模块中的属性和函数
借助sys模块获取当前模块的名称。
练习1
查看当前的所有模块
练习2
反射当前模块中的name变量
练习3
反射当前模块中的函数
注意事项:如果本模块作为导入模块 模块的名称就不是 __main__了,因此使用 __name__属性动态获取
fun = getattr(sys.modules[__name__], 'func')
fun()
反射内置模块
用法和反射导入模块相同
练习1
反射time模块中的time()函数