1. 程式人生 > >【我要學python】MethodType和isinstance和Type函式

【我要學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