HOWTO · Python

在 Python 中檢查變數型別

本文說明如何使用 Python 的 `type()` 與 `isinstance()` 檢查值的型別。

本頁內容

使用 type(value) 查看值的型別,或使用 isinstance(value, SomeType) 測試該值是否屬於某個型別(包括其子類別)。Python 變數是繫結至物件的名稱,因此要檢查的是名稱所指向的值,而不是預先宣告的變數型別。

Python 中的變數及其型別

Python 名稱會參照一個物件,而每個物件都有型別。指定值時,名稱會繫結至該物件;你不需要事先宣告名稱的型別。例如,42、3.5、"hello"、True 和 [1, 2] 分別是 int、float、str、bool 和 list 型別的值。同一個名稱之後也可以參照不同型別的物件。

在 Python 中檢查變數的型別

若要快速查看型別,可以將值傳給 type();如果程式需要取得布林值型別測試結果,則使用 isinstance()。下方範例以整數和字串示範這兩種作法。這是一個完整獨立的範例;使用 Python 執行即可查看列印結果。

count = 50
label = "Ada"

print(type(count))
print(type(label))
print(isinstance(count, int))
print(isinstance(label, int))
<class 'int'>
<class 'str'>
True
False

使用 type() 函式檢查 Python 中的變數型別

內建的 type() 函式會傳回傳入值的型別物件。列印時,常見的內建型別會以 <class 'int'>、<class 'float'> 和 <class 'str'> 等形式顯示。除錯時查看值的型別,或依照確切型別決定後續行為,都可以使用這個函式。

例如,type(50) 是 int、type(10.5) 是 float,而 type("Ada") 是 str。呼叫 type() 會回報物件的型別,不會將物件轉換成其他型別。

在 Python 中使用 isinstance() 函式檢查變數型別

使用 isinstance(value, classinfo) 可取得 True 或 False,判斷 value 是否為指定類別或類別組合的實例。與直接將 type(value) 的結果和某個類別比較不同,isinstance() 也會辨識子類別。因此,若檢查應接受某個類別及其衍生類別,這通常是合適的選擇。

class Animal:
    pass

class Dog(Animal):
    pass

pet = Dog()
print(isinstance(pet, Dog))
print(isinstance(pet, Animal))
print(type(pet) is Dog)
True
True
True

在這個範例中,兩個 isinstance() 檢查都會得到 True,因為 Dog 繼承自 Animal;確切型別比較也會得到 True,因為 pet 是以 Dog 建立的。只有在確實需要完全相符的型別時,才使用 type(value) is SomeType。檢查型別或實例不會改變值的型別。

當函式的設計目標是處理基底類別及其衍生出的特殊物件時,這項差異就很重要。例如,接受 Animal 的程式通常也能透過相同介面處理 Dog,因此 isinstance(pet, Animal) 能表達這項契約。即使 Dog 繼承自 Animal,type(pet) is Animal 這類確切型別檢查仍會拒絕它。只有在必須區別子類別或明確不支援子類別時,才使用確切型別檢查;一般的多型程式碼通常使用可辨識子類別的檢查更有彈性。