0

什么是区分旧式和新式 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% 的信心认为它适用于作为参数提供的所有对象。

4

2 回答 2

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
于 2012-05-24T04:06:04.033 回答
0

为什么不只是

type(my_class) is type

True新式课程,False经典课程

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

issublass(type(myclass), type)
于 2012-05-24T02:53:10.060 回答