2016-01-24 76 views
4

確定某個對象的類型是否包含在特定模塊中的Pythonic方法最多?在Python模塊中檢查類型是否存在

例如,假設我想匹配日期時間模塊中的日期,時間和日期時間類。

import datetime 
mylist = [obj1, obj2, obj3, ...] 
for obj in mylist: 
    if type(obj) in [datetime.datetime, datetime.time, datetime.date]: 
     #Do thing 

它似乎愚蠢地創建三個匹配的每個循環的實例。有沒有更簡單的方法來說「如果在某個模塊中鍵入(obj)」?

回答

3

isinstance()可以檢查針對多種類型:

isinstance(object, classinfo)

返回真,如果該對象參數是classinfo參數的實例,或其(直接,間接或虛擬的)亞類的。如果object不是給定類型的對象,則該函數總是返回false。 如果classinfo是類型對象的元組(或遞歸地,其他這樣的元組),則返回true,如果object是任何類型的實例。如果classinfo不是類型和這些元組的類型或元組,則會引發TypeError異常。

if isinstance(obj, (datetime.datetime, datetime.time, datetime.date)): 
+1

在這種特殊情況下,它甚至可能只是檢查'datetime.date'和'datetime.time'因爲'datetime.datetime'的父類是'datetime.date'。 – L3viathan