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