【我要學python】MethodType和isinstance和Type函式
阿新 • • 發佈:2018-12-28
一.首先來看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