【我要学python】MethodType和isinstance和Type函数
一.首先来看isinstance:
a=6 isinstance(a,int) #返回Ture isinstance(a,str) #返回False isinstance (a,(str,int,list)) # 是元组中的一个返回 True
二.接下来看Type函数:
type(666) == int #返回 Ture type(666) == list #返回False type({"w":"1","q":"2"})==dict #返回 Ture type([1,2,3])==list #返回 Ture
三.再而来看两者区别:
1 class A: 2 pass 3 class B(A): #B类继承A类 4 pass 5 6 isinstance(A(),A) #ture 7 8 type(A())==A #ture 9 10 isinstance(B(),A) #ture 11 12 type(B())==A #false
-
type() 不会认为子类是一种父类类型,不考虑继承关系。
-
isinstance() 会认为子类是一种父类类型,考虑继承关系。
四.MethodType函数
from types import MethodType #创建一个方法 def set_age(self, age): self.age = age #创建一个类 class Student(object): pass #以上为公共代码
s_out = Student()
#创建一个外部的set_age方法链接到Student内 #将set_age方法绑定到对象s_out上 #MethodType第一个参数是绑定的方法 #第二个是绑定的对象 #第三个是绑定的类名可以忽略
s_out.set_age = MethodType(set_age,s_out,Student) #调用方法 s_out.set_age(666) #返回值为 666 print s_out.age #错误示范 没有把方法绑定到对象 导致错误 s_wrong = Student() s_wrong.set_age(100) print s_wrong.age
#将set_age方法绑定到类Student上 Student.set_age = MethodType(set.age,None,Student) s1=Student() s2=Student() s1.set_age(666) s2.set_age(777) print s1.age print s2.age #返回值为666 777 成功调用 #如果在绑定的时候第二个参数没有写None的话 s2属性就会覆盖s1 只输出777