2009-10-28 52 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." 
相关问题