我們在Python中使用type()函數來識別特定的Python對象類型。這是一個非常直觀且易於理解的函數。废话不多,讓我們直接進入語法。
Python type()函數的語法
Python擁有許多內置函數。type()函數用於獲取對象的類型。
Python type()函數的語法如下:
type(object)
type(name, bases, dict)
當將單個參數傳遞給type()函數時,它返回對象的類型。其值與object.__class__實例變量相同。
當傳遞三個參數時,它返回一個新的類型對象。它用於動態地即時創建一個類。
- “name”字符串成為類名。與類的__name__屬性相同。
- “bases”元組指定基類。與類的__bases__屬性相同。
- “dict”字典用於創建類的主體。與類的__dict__屬性相同。
Python中type()函数的示例
让我们看一些使用type()函数的示例。
1. 查找Python对象的类型
x = 10
print(type(x))
s = 'abc'
print(type(s))
from collections import OrderedDict
od = OrderedDict()
print(type(od))
class Data:
pass
d = Data()
print(type(d))
输出:
<class 'int'>
<class 'str'>
<class 'collections.OrderedDict'>
<class '__main__.Data'>
注意,type()函数返回带有模块名称的对象类型。由于我们的Python脚本没有模块,它的模块变成了__main__。
2. 从Python类中提取详细信息
假设我们有以下类。我们将使用class、bases、dict和doc属性提取有关类的元数据。
class Data:
"""Data Class"""
d_id = 10
class SubData(Data):
"""SubData Class"""
sd_id = 20
让我们打印一些这些类的属性。
print(Data.__class__)
print(Data.__bases__)
print(Data.__dict__)
print(Data.__doc__)
print(SubData.__class__)
print(SubData.__bases__)
print(SubData.__dict__)
print(SubData.__doc__)
输出:
<class 'type'>
(<class 'object'>,)
{'__module__': '__main__', '__doc__': 'Data Class', 'd_id': 10, '__dict__': <attribute '__dict__' of 'Data' objects>, '__weakref__': <attribute '__weakref__' of 'Data' objects>}
Data Class
<class 'type'>
(<class '__main__.Data'>,)
{'__module__': '__main__', '__doc__': 'SubData Class', 'sd_id': 20}
SubData Class
我们可以使用type()函数创建类似的类。
Data1 = type('Data1', (object,), {'__doc__': 'Data1 Class', 'd_id': 10})
SubData1 = type('SubData1', (Data1,), {'__doc__': 'SubData1 Class', 'sd_id': 20})
print(Data1.__class__)
print(Data1.__bases__)
print(Data1.__dict__)
print(Data1.__doc__)
print(SubData1.__class__)
print(SubData1.__bases__)
print(SubData1.__dict__)
print(SubData1.__doc__)
输出:
<class 'type'>
(<class 'object'>,)
{'__doc__': 'Data1 Class', 'd_id': 10, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Data1' objects>, '__weakref__': <attribute '__weakref__' of 'Data1' objects>}
Data1 Class
<class 'type'>
(<class '__main__.Data1'>,)
{'__doc__': 'SubData1 Class', 'sd_id': 20, '__module__': '__main__'}
SubData1 Class
请注意,我们无法使用type()函数在动态类中创建函数。
type() 函式的實際用法
Python 是一種動態類型的語言。因此,如果我們想知道參數的類型,我們可以使用 type() 函式。如果您希望確保您的函式僅在特定類型的物件上運作,請使用 isinstance() 函式。
假設我們想要創建一個函式來計算兩個整數的某些事情。我們可以按照以下方式實現它。
def calculate(x, y, op='sum'):
if not(isinstance(x, int) and isinstance(y, int)):
print(f'Invalid Types of Arguments - x:{type(x)}, y:{type(y)}')
raise TypeError('Incompatible types of arguments, must be integers')
if op == 'difference':
return x - y
if op == 'multiply':
return x * y
# 默認是求和
return x + y
使用 isinstance() 函式 來驗證輸入參數的類型。當驗證失敗時,type() 函式用於打印參數的類型。
參考資料
Source:
https://www.digitalocean.com/community/tutorials/python-type