2009-10-28 93 views
0

我想包裝創建my_function能夠接受一個類或類的實例,而不是寫兩個不同的功能:有沒有辦法檢查param是否包含類或類實例?

>>> from module import MyClass 

>>> my_function(MyClass) 

True 

>>> cls_inst = MyClass() 

>>> my_function(cls_inst) 

True 

的問題是,我不提前知道哪些類型的類或類我將要收到的實例。所以我不能,例如,使用像isinstance這樣的功能...

如何以普通的方式鍵入檢查param是否包含類或類實例?

有什麼想法?

+0

你能提供這樣一個用例?它在表面上沒有很多意義。爲什麼你不能使用'my_function(object .__ class__)'這樣事情至少是一致的? – 2009-10-28 17:54:13

回答

7
>>> class A: pass 

>>> isinstance(A, type) 
True 
>>> isinstance(A(), type) 
False 
+0

你的例子是一箇舊式的類,但是這也適用於新式類。 – steveha 2009-10-28 19:42:21

+0

我的例子是py3k;) – SilentGhost 2009-10-28 19:52:16

0

使用type()buitlin函數。

例如爲:

import avahi 
print type(avahi) 

<type 'module'> 
1
import types 

def myfun(maybe_class): 
    if type(maybe_class) == types.ClassType: 
     print "It's a class." 
    else: 
     print "It's an instance." 
相關問題