区分旧式和新式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 :(得分: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
答案 1 :(得分:0)
为什么不
type(my_class) is type
True
表示新的样式类,False
表示经典类
您可以支持具有不同元类的类(只要元类是子类化类型)
issublass(type(myclass), type)