2016-04-05 122 views

回答

3

是,在这两个Python2和Python3:

​​

注意,在Python2的类,不属于object子类是老式类。然而,这样的类的实例仍然实例object

>>> class Foo: 
...  pass 
... 
>>> foo = Foo() 
>>> foo 
<__main__.Foo instance at 0x7f2a33474bd8> 
>>> type(foo) 
<type 'instance'> 
>>> foo.__class__ 
<class __main__.Foo at 0x7f2a33468668> 
>>> Foo.mro() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: class Foo has no attribute 'mro' 
>>> issubclass(Foo, object) 
False 
>>> isinstance(foo, object) 
True 
>>> type(foo).mro() 
[<type 'instance'>, <type 'object'>] 
>>> issubclass(type(foo), object) 
True 

编辑:我怀疑一些事情可能为Python <是不同的2.6,并可能在C.

实施
1

是。

isinstance函数可以告诉你这个。

>>> isinstance(None, object) 
True 
+2

从技术上讲,实例检查与子类检查不同,它与mro检查也不是同一回事。 – o11c

+0

@ o11c'str .__ bases__'给出'object'。但'NoneType .__ bases__'不会给'object'。 '__bases__'属性是否与检查子类相关? – overexchange

+1

@overxchange'type(None).__ bases__ ==(object,)'对我来说,在python2.7和python3.5 – o11c

1

是的类型,但我只能版本3.4测试

Python 3.4.3 (default, May 5 2015, 17:58:45) 
[GCC 4.9.2] on cygwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> None.__class__ 
<class 'NoneType'> 
>>> issubclass(None.__class__, object) 
True