隨著我們學習步伐的前進,我們的程序會出現越來越多的類型,有我們自己定義的類,也有Python自有的str、list、dict等,他們的本質都是都是Python中的一種數據類型,這時有必要去判斷數據的類型,通過函數isinstance()可以判斷一個變量的類型。
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')
當我們拿到變量 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的實例也是可以的。
這說明在一條繼承鏈上,一個實例可以看成它本身的類型,也可以看成它父類的類型。
isinstance也可以用于Python自有數據類型的判斷。
?s = 'this is a string.' n = 10 isinstance(s, int) # ==> False isinstance(n, str) # ==> False
請根據繼承鏈的類型轉換,依次思考 t 是否是 Person,Student,Teacher,object 類型,并使用isinstance()判斷來驗證您的答案。
1. 使用isinstance()來進行判斷
2. 使用print()函數打印輸出判斷結果
請驗證,完成請求
由于請求次數過多,請先驗證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報