Gil*_*tes 9 python python-2.x new-style-class
码:
import types
class C(object):
pass
c = C()
print(isinstance(c, types.InstanceType))
Run Code Online (Sandbox Code Playgroud)
输出:
False
Run Code Online (Sandbox Code Playgroud)
检查对象是否为新式类的用户定义类的实例的正确方法是什么?
如果检查对象的类型是否是用户定义的,我想要额外强调.根据文件:
types.InstanceType 用户定义的类
的实例类型.
好吧 - 不是"正确"的方式也可以.
还注意到set模块中没有类型types
您可以结合x.__class__使用的任何存在(或不)检查'__dict__' in dir(x)或hasattr(x, '__slots__')作为哈克的方式既新/旧样式类和用户/内建对象来区分.
实际上,这个完全相同的建议出现在/sf/answers/185836451/中
def is_instance_userdefined_and_newclass(inst):
cls = inst.__class__
if hasattr(cls, '__class__'):
return ('__dict__' in dir(cls) or hasattr(cls, '__slots__'))
return False
Run Code Online (Sandbox Code Playgroud)
>>> class A: pass
...
>>> class B(object): pass
...
>>> a = A()
>>> b = B()
>>> is_instance_userdefined_and_newclass(1)
False
>>> is_instance_userdefined_and_newclass(a)
False
>>> is_instance_userdefined_and_newclass(b)
True
Run Code Online (Sandbox Code Playgroud)
我不确定"正确"的方法,但测试它的一种简单方法是旧样式类的实例具有类型'实例'而不是它们的实际类.
所以type(x) is x.__class__或type(x) is not types.InstanceType两者都应该有效.
>>> class Old:
... pass
...
>>> class New(object):
... pass
...
>>> x = Old()
>>> y = New()
>>> type(x) is x.__class__
False
>>> type(y) is y.__class__
True
>>> type(x) is types.InstanceType
True
>>> type(y) is types.InstanceType
False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3512 次 |
| 最近记录: |