Python是一種動態的、解釋性的高級語言,而且非常靈活,它提供了很多類型操作函數,其中一個重要的函數就是isinstance函數。isinstance函數可以用來判斷對象的類型,幫助開發者編寫出更加健壯、可靠、易於維護的程序。
一、數據類型判斷
Python有很多常用的數據類型,比如int、float、bool、str、list、tuple、dict等等,而isinstance函數可以用來判斷對象屬於哪種數據類型。
num = 10 flt = 3.14 bln = True string = "Hello World" lst = [1, 2, 3] tpl = (4, 5, 6) dct = {'name': 'bob', 'age': 20} print(isinstance(num, int)) # True print(isinstance(flt, float)) # True print(isinstance(bln, bool)) # True print(isinstance(string, str)) # True print(isinstance(lst, list)) # True print(isinstance(tpl, tuple)) # True print(isinstance(dct, dict)) # True
以上代碼就是使用isinstance函數來判斷不同類型的數據對象,其中返回的結果為True則表示該對象的類型匹配,否則為False表示不匹配。
二、類類型判斷
在Python中,類也是一種對象,而且Python推崇「一切皆對象」的哲學思想,因此我們也可以使用isinstance來判斷一個對象是否是某個類的實例。
class Person(): name = "" age = 0 def __init__(self, name, age): self.name = name self.age = age p1 = Person("Bob", 20) print(isinstance(p1, Person)) # True
以上代碼中,我們定義了一個Person類,並定義了它的name和age屬性,還有一個構造函數。然後我們實例化了一個Person類的對象p1,並且使用isinstance函數來判斷它是否是Person類的實例,返回的結果是True。
三、子類類型判斷
在Python中,類可以繼承其他類,因此我們也可以使用isinstance來判斷一個對象是否是某個類的子類的實例。
class Animal(): def move(self): pass class Dog(Animal): def bark(self): print("Wang! Wang!") class Cat(Animal): def meow(self): print("Miao~ Miao~") c1 = Cat() print(isinstance(c1, Animal)) # True print(isinstance(c1, Dog)) # False print(isinstance(c1, Cat)) # True
以上代碼中,我們定義了一個Animal類和兩個繼承自Animal類的子類Dog和Cat,然後我們定義了一個Cat類的對象c1,並使用isinstance函數來判斷c1是否是Animal類和Cat類的實例,返回的結果是True,符合我們的預期。但是使用isinstance函數來判斷c1是否是Dog類的實例時,返回的結果是False,這是因為c1並沒有繼承Dog類,因此不是Dog類的實例。
四、多種類型判斷
在Python中,一個對象可能會同時屬於多種類型,這時我們可以通過isinstance函數來判斷它是否屬於其中某些類型。
class Animal(): def move(self): pass class Dog(Animal): def bark(self): print("Wang! Wang!") class Cat(Animal): def meow(self): print("Miao~ Miao~") class Person(): name = "" age = 0 def __init__(self, name, age): self.name = name self.age = age p2 = Person("Alice", 25) print(isinstance(p2, (Animal, Person))) # True print(isinstance(p2, (Dog, Cat))) # False print(isinstance(p2, (Person, Dog))) # True
以上代碼中,我們定義了Animal、Dog、Cat、Person四個類,然後我們實例化了一個Person類的對象p2。使用isinstance函數來判斷p2是否屬於Animal、Person類型的其中一個返回結果為True,表示p2屬於其中之一。但是isinstance函數來判斷p2是否屬於Dog、Cat類型的其中一個返回結果為False,表示p2不屬於兩者之一。最後使用isinstance函數來判斷p2是否屬於Person、Dog類型的其中一個返回結果也為True,表示p2屬於其中之一。
五、應用
isinstance函數在實際應用中有很多場景,它可以幫助開發者更加靈活地處理不同類型的數據和對象,提高程序的健壯性和可維護性。
下面是一個簡單的示例,假設我們要編寫一個函數,用來獲取一個列表中所有序號為奇數的元素,這個函數需要接收一個列表作為參數,並返回一個新的列表,包含所有序號為奇數的元素。
def get_odd_items(lst): result = [] for i in range(len(lst)): if i % 2 != 0 and isinstance(lst[i], int): result.append(lst[i]) return result lst1 = [1, 2, 3, "foo", True, 4, 5, "bar", 6, 7] lst2 = get_odd_items(lst1) print(lst2) # [2, 'foo', 4, 6]
以上代碼中,我們編寫了一個get_odd_items函數,它接收一個列表作為參數。在函數內部,我們遍歷了列表中所有元素,如果它的序號為奇數並且元素類型為int,則將它添加到結果列表中。最後返回結果列表。
我們使用列表lst1作為示例參數列表,其中包含了不同類型的元素(int、str、bool),通過使用isinstance函數來判斷它們是否為int類型。函數返回了一個新的列表,包含了所有序號為奇數的int元素。輸出結果為[2, ‘foo’, 4, 6],符合我們的預期。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/301240.html