2016-04-05 11 views

Antwort

3

Ja, in beiden Python2 und Python3:

>>> type(None) 
<class 'NoneType'> 
>>> type(None).mro() 
[<class 'NoneType'>, <class 'object'>] 
>>> issubclass(type(None), object) 
True 
>>> isinstance(None, object) 
True 

Beachten Sie, dass in Python2 die nur Klassen, die nicht Subklassen von object sind im alten Stil-Klassen. Allerdings Beispiele solcher Klassen immer noch Fälle von object sind:

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

Edit: Ich vermute, dass einige Dinge könnten

1

Ja.

Die isinstance Funktion kann Ihnen dies sagen.

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

Technisch gesehen ist die Instanzprüfung nicht dasselbe wie die Unterklassenprüfung, was auch nicht dasselbe ist wie die Prüfung von mro. – o11c

+0

@ o11c 'str .__ base__' gibt' object'. Aber 'NoneType .__ base__' gibt kein' object'. Ist die Eigenschaft '__bases__' relevant, um die Unterklasse zu prüfen? – overexchange

+1

@overexchange 'Typ (keine) .__ Basen__ == (Objekt,)' für mich auf Python2.7 und Python3.5 – o11c

1

Ja in C implementiert für Python < 2.6 und möglicherweise für die Typen unterschiedlich sein, obwohl ich kann nur Test mit Version 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 
Verwandte Themen