相关疑难解决方法(0)

Python中的旧样式和新样式类有什么区别?

Python中的旧样式和新样式类有什么区别?我什么时候应该使用其中一种?

python oop types class new-style-class

953
推荐指数
8
解决办法
22万
查看次数

在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)

python class python-2.x

14
推荐指数
1
解决办法
2182
查看次数

在运行时的python中确定对象是否是类(旧类型和新类型)实例

我正在尝试使用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

python class

5
推荐指数
1
解决办法
921
查看次数

标签 统计

class ×3

python ×3

new-style-class ×1

oop ×1

python-2.x ×1

types ×1