函式isinstance()可以判斷乙個變數的型別,既可以用在python內建的資料型別如str、list、dict,也可以用在我們自定義的類,它們本質上都是資料型別。
假設有如下的 person、student 和 teacher 的定義及繼承關係如下:
classperson(object):
def__init__
(self, name, gender):
self.name =name
self.gender =gender
class
student(person):
def__init__
(self, name, gender, score):
super(student, self).
__init__
(name, gender)
self.score =score
class
teacher(person):
def__init__
(self, name, gender, course):
super(teacher, self).
__init__
(name, gender)
self.course =course
p = person('
tim', '
male')
s = student('
bob', '
male
', 88)
t = teacher('
alice
', '
female
', '
english
')
當我們拿到變數 p、s、t 時,可以使用 isinstance 判斷型別:
>>>isinstance(p, person)true
#p是person型別
>>>isinstance(p, student)
false
#p不是student型別
>>>isinstance(p, teacher)
false
#p不是teacher型別
這說明在繼承鏈上,乙個父類的例項不能是子類型別,因為子模擬父類多了一些屬性和方法。
我們再考察 s :
>>>isinstance(s, person)true
#s是person型別
>>>isinstance(s, student)
true
#s是student型別
>>>isinstance(s, teacher)
false
#s不是teacher型別
s 是student型別,不是teacher型別,這很容易理解。但是,s 也是person型別,因為student繼承自person,雖然它比person多了一些屬性和方法,但是,把 s 看成person的例項也是可以的。
這說明在一條繼承鏈上,乙個例項可以看成它本身的型別,也可以看成它父類的型別。
請根據繼承鏈的型別轉換,依次思考 t 是否是 person,student,teacher,object 型別,並使用isinstance()判斷來驗證您的答案。
classperson(object):
def__init__
(self, name, gender):
self.name =name
self.gender =gender
class
student(person):
def__init__
(self, name, gender, score):
super(student, self).
__init__
(name, gender)
self.score =score
class
teacher(person):
def__init__
(self, name, gender, course):
super(teacher, self).
__init__
(name, gender)
self.course =course
t = teacher('
alice
', '
female
', '
english')
(isinstance(t,person))
(isinstance(t,student))
(isinstance(t,teacher))
print (isinstance(t,object))
truefalse
true
true
Python型別判斷
有次面試被問到python中怎麼判斷資料型別。答 type 和isinstance type 方法的語法 type name,bases,dict 其中name是類的名稱,bases是基類的元組,dict是類內定義的命名空間變數。當有 乙個引數時它的返回值是物件型別,有三個引數時,返回值是新的型別物...
Python 判斷變數型別
資訊來自於如下 使用python判斷變數型別時候要使用 isinstance 函式而非 type 函式進行判斷 比如 a 111 isinstance a,int trueisinstance 和 type的區別在於 class a pass class b a pass isinstance a ...
Python判斷字元型別
輸入一行字元,輸出其中空格 數字 中文字元 英文本元和其他字元的個數。str input 請輸入一行字元 n chinese 0letters 0space 0digit 0others 0for c in str if c.isspace space 1elif c.isdigit digit 1...