# 一 python面向对象-内置函数(issubclass(), type(), isinstance()) # issubclass 判断xxxx类是否是xxxx类的子类 class egg: pass class eegg(egg): pass class yuneegg(eegg): pass dan = egg() edan = eegg() shouyunedan = yuneegg() print(issubclass(eegg, egg)) # True 鹅蛋继承蛋的属性,是子类 print(issubclass(yuneegg,egg)) # True .受孕鹅蛋也是蛋的子类,都都蛋蛋 print(issubclass(eegg, yuneegg)) # False 鹅蛋也有没受孕的 # type 给出xxx的数据类型. 给出创建这个对象的类 print(type(dan) and type(edan)) # False 返回创建他的类,不找子类或者父类,只找创造的类 # isinstance 判断xxx对象是否是xxx类型的 判断是不是一个类的体系,只找直系向上的,不找分支和子类 print(isinstance(dan, egg)) # True ,有蛋创建的 print(isinstance(edan,egg)) # True ,鹅蛋也是单,是他的子类 print(isinstance(shouyunedan, egg)) # TRUE受孕鹅蛋还是蛋,可以找祖宗 print(isinstance(dan, eegg)) # FALSE 蛋不一定是鹅蛋,也许是鸭蛋 # 二 2. 如何分辨方法和函数. # 在类外面定义的函数一定是函数 # 在类中: # 1. 实例方法: 如果是对象访问.方法,, 如果是类名访问是函数 # 2. 静态方法: 都是函数 # 3. 类方法: 都是方法 # 如果想要用程序来判断. 需要引入两个模块 # from types import FunctionType, MethodType # isinstance() from types import FunctionType,MethodType class Animal: def __init__(self, kemu, xueming): self.kemu = kemu self.xueming = xueming def add(self): return self.kemu + self. xueming tiger = Animal("cat", "oldhu") print(isinstance(tiger.add, FunctionType)) print(isinstance(tiger.add, MethodType)) # 三 # 反射(重点) # 仅限于内存层面(函数执行不改变源文件,只修改内存加载的信息) # 重点: # hasattr(obj, str)判断对象中是否包含了xxx(str) import handler a = hasattr(handler, "Base") #存在True, 不存在FALSE b = hasattr(handler, "ali") #False print(a) print(b) # getattr(obj, str)从对象中获取xxxx(str) c = getattr(handler, "Base") # 存在返回Base变量 # qita = getattr(handler, "aad")# 不能存在报错 c() # 次重点: # setattr(obj, str, value) 给对象设置xxxx(str)属性值(value) setattr(handler, "t", 12) # 不存在执行新增,存在执行修改变量t print(handler.t) # delattr(obj, str)从对象中删除xxxxx(str) 信息 delattr(handler,"t") # 删除变量t delattr(handler,"xxx") # 不存在报错 print(handler.t)