Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';这是一个简单的实用函数,用于区分旧式和新式python类或对象_Python_New Style Class - Fatal编程技术网

什么';这是一个简单的实用函数,用于区分旧式和新式python类或对象

什么';这是一个简单的实用函数,用于区分旧式和新式python类或对象,python,new-style-class,Python,New Style Class,什么是一个简单的实用函数来区分旧样式和新样式的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 如果没有,那么你能提供一个解决方案吗。如果是这样的话,有没有更

什么是一个简单的实用函数来区分旧样式和新样式的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%的信心它能适用于作为参数提供的所有对象。

为什么不

type(my_class) is type
True
适用于新样式类,
False
适用于经典类

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

那么:

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

这只涉及类,我试图解释任何对象,例如type(list())是list,所以这将使您的测试失败。只需对任意对象的类型进行测试即可。@Cyrus,神奇地尝试支持实例和类是个坏主意。考虑一个类是<代码>类型(通常)的实例。<代码> ISNeWordSy= lambda x:HasTART(X,“Y-AyfReffyx”)< /C> >选择一个新样式类所具有的特性,但旧样式类没有。
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