issubclass/type/isinstance
class a:
pass
class b(a):
pass
print(issubclass(b,a))查看b是不是a的子子孙孙类/派生类
class a:
pass
b=a()
print(b,type(b)) 获取当前对象是由哪个类创建的
if type(b) == a
print(‘xxx’) 给你一个对象,判断对象是不是由某一个指定的类? type--》type(对象名)==类名
class a:
pass
b=a()
print(isinstance(b,a)) 当前对象是否由这个类组成的 检查第一个参数(对象)是否是第二个参数(类)的实例
如果 a 继承了上面的,这个b也跟着显示true
给你一个对象,判断对象是不是由某一个指定的类和其父类组成 isinstance --》 isinatance(对象名,类名)
函数和方法
对象。xxx xxx是方法 类。xxx xxx是函数 xxx xxx就是函数
from types import methodtype functiontype m方法self不用传 f函数 每个都自己传
反射 ,不是。 hasattr判断对象是否包含对应的属性 (模块名,属性(方法))判断这个模块里有没有后者,
isinstance判断对象的变量类型 ( xxx ,int) xxx是不是数字(xxx,functiontype)xxx是不是函数
class 类名(object):
变量=“中”
def 方法名(self):
pass
对象=getattr(类名,“方法名” (或者“变量”)) 本质上就是 类名。“方法名” (或者“变量”) 根据字符串为参数,去类中寻找与之同名的成员
print(对象) 打印的是上面的
上面的是函数,下面的是方法
对象=类名()
变量=getattr(对象,“方法”)相当于对象。方法 根据字符串(第二个)为参数,去对象去对象(第一个)中寻找与之同名的成员
print(变量)
反射补充
getattr 根据字符串的形式,去对象中找成员。
hasattr 根据字符串的形式,去判断对象中是否有成员
setattr 根据字符串的形式,动态的设置一个成员(内存)
delattr 根据字符串的形式,动态的删除一个成员(内存)
setattr添加成员
setattr(模块(自己写的),“新增的成员”,999) 这个是设置到内存的,在内存中这个模块加了这个成员,模块里是没有的,运行任何程序都需要给他装进内存中
模块就是对象 给这个对象新增个成员
变量=getattr(模块(自己写的),“新增的成员”)
print(变量) 999
setattr 添加函数
setattr(模块(自己写的),“函数名“,lambda x:x+1)
变量=getattr(模块(自己写的),“函数名”)
变量1=变量(1) 把1传到函数里
print(变量)
delattr
delattr(模块(自己写的),“函数名”)
变量=getattr(模块(自己写的),‘函数名’)
print(变量) 这里没有了打印不出来了 报错
class 类名(object):
def __init__(self,成员):
self.成员=成员 这行下面再加个 self。成员1=none 这样后面再传值,外人看知道
对象=类名(1) 成员=1
变量=getattr(对象,a1)
print(变量)
变量=setattr(对象,“成员1”,2) 这个在上面self里传了个参数
print(变量) 这样也可以,但是别这么做,别人看代码的时候很是懵逼
print(callable(类,函数,对象,方法))true flase
判断他是不是可执行的