Python中的旧样式和新样式类有什么区别?我什么时候应该使用其中一种?
我正在使用Python 2.x,我想知道是否有办法判断一个变量是否是一个新式的类?我知道,如果它是一个旧式的课程,我可以做以下事情来找出答案.
import types
class oldclass:
pass
def test():
o = oldclass()
if type(o) is types.InstanceType:
print 'Is old-style'
else:
print 'Is NOT old-style'
Run Code Online (Sandbox Code Playgroud)
但我找不到任何适用于新式课程的东西.我发现了这个问题,但提出的解决方案似乎没有按预期工作,因为简单的值被识别为类.
import inspect
def newclass(object):
pass
def test():
n = newclass()
if inspect.isclass(n):
print 'Is class'
else:
print 'Is NOT class'
if inspect.isclass(type(n)):
print 'Is class'
else:
print 'Is NOT class'
if inspect.isclass(type(1)):
print 'Is class'
else:
print 'Is NOT class'
if isinstance(n, object):
print 'Is class'
else:
print 'Is NOT class'
if isinstance(1, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用h5py模块将一组深度嵌套的类,属性,绑定方法等编写到HDF5文件中以进行长期存储.我真的很亲密 我似乎无法解决的唯一问题是以编程方式在运行时找出一种方法来确定某些东西是否是类实例类型,而不是列表,int等.我需要递归到类实例,但显然不应该递归到int,float等.这需要适用于旧式和新式类.我研究过的东西不起作用/我无法开始工作:
使用检查模块
>>> class R(object): pass
...
>>> _R = R()
>>> import inspect
>>> inspect.isclass(_R)
False
>>> inspect.isclass(R)
True
Run Code Online (Sandbox Code Playgroud)
这没用,我需要一个像inspect.isclassinstance(_R)返回的函数True
使用类型模块
如果使用旧式类,则会有一个名为InstanceType的类型,它匹配旧式类的实例,如下面的代码所示
>>> import types
>>> class R(): pass #old-style class
...
>>> _R = R()
>>> import types
>>> type(_R) is types.InstanceType
True
>>> class R(object): pass #new-style class
...
>>> _R = R()
>>> type(_R) is types.InstanceType
False
Run Code Online (Sandbox Code Playgroud)
但是如果使用新式类,则没有相应的类型 types