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
判断他是不是可执行的