2012-05-24 19 views
1

什么是简单的效用函数,以旧式的和新的风格的蟒蛇类或对象区分?什么是一个简单的工具功能的老式和新式的Python类进行区分或对象

有以下几种正确/完整:

isNewStyle1 = lambda o: isinstance(hasattr(o, '__class__') and o.__class__ or o, type) 
isNewStyle2 = lambda o: hasattr(o, '__class__') and type(o) == o.__class__ or False 

如果没有,那么你能提供一个解决方案。如果是这样,是否有更好的方法来做这个检查?

使用上面,我已经没有任何问题,但我没有100%的信心,这将对于作为参数提供的所有对象。

+0

'isNewStyle =拉姆达X:hasattr(X, “__weakref __”)'只需选择一个功能,新式类都有,但老样式类没有。 –

回答

0

为什么不

type(my_class) is type 

True新样式类,False经典类

可以支持不同的元类这样的类(只要元类是子类型)

issublass(type(myclass), type) 
+0

这仅仅覆盖类,我试图说明任何对象,例如类型(列表())是列表,以便将失败的测试。 – Cyrus

+0

然后my_class =类型(列表())。只要对任何任意对象的类型进行测试即可。 –

+0

@Cyrus,奇妙的是试图支持实例和类是一个坏主意。考虑一个类是_类型_instance_的类型(通常)。 –

1

如何:

class A: pass 

class B(object): pass 


def is_new(myclass): 
    try: myclass.__class__.__class__ 
    except AttributeError: return False 
    return True 

>>> is_new(A) 
False 
>>> is_new(B) 
True 
>>> is_new(A()) 
False 
>>> is_new(B()) 
True 
>>> is_new(list()) 
True 
相关问题