隨著我們學(xué)習(xí)步伐的前進(jìn),我們的程序會(huì)出現(xiàn)越來越多的類型,有我們自己定義的類,也有Python自有的str、list、dict等,他們的本質(zhì)都是都是Python中的一種數(shù)據(jù)類型,這時(shí)有必要去判斷數(shù)據(jù)的類型,通過函數(shù)isinstance()可以判斷一個(gè)變量的類型。
class Person(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')
當(dāng)我們拿到變量 p、s、t 時(shí),可以使用 isinstance 判斷類型:
>>> isinstance(p, Person) True # p是Person類型 >>> isinstance(p, Student) False # p不是Student類型 >>> isinstance(p, Teacher) False # p不是Teacher類型
這說明在繼承鏈上,一個(gè)父類的實(shí)例不能是子類類型,因?yàn)樽宇惐雀割惗嗔艘恍傩院头椒ā?br /> 我們?cè)倏疾?s:
>>> isinstance(s, Person) True # s是Person類型 >>> isinstance(s, Student) True # s是Student類型 >>> isinstance(s, Teacher) False # s不是Teacher類型
s 是Student類型,不是Teacher類型,這很容易理解。但是,s 也是Person類型,因?yàn)镾tudent繼承自Person,雖然它比Person多了一些屬性和方法,但是,把 s 看成Person的實(shí)例也是可以的。
這說明在一條繼承鏈上,一個(gè)實(shí)例可以看成它本身的類型,也可以看成它父類的類型。
isinstance也可以用于Python自有數(shù)據(jù)類型的判斷。
?s = 'this is a string.' n = 10 isinstance(s, int) # ==> False isinstance(n, str) # ==> False
請(qǐng)根據(jù)繼承鏈的類型轉(zhuǎn)換,依次思考 t 是否是 Person,Student,Teacher,object 類型,并使用isinstance()判斷來驗(yàn)證您的答案。
1. 使用isinstance()來進(jìn)行判斷
2. 使用print()函數(shù)打印輸出判斷結(jié)果
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求
打開微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報(bào)