In der Hierarchie unter Klasse,Erbt die NoneType-Klasse die Objektklasse?
Hat Klasse NoneType
erbt Klasse object
?
Hinweis: Python 3,5
In der Hierarchie unter Klasse,Erbt die NoneType-Klasse die Objektklasse?
Hat Klasse NoneType
erbt Klasse object
?
Hinweis: Python 3,5
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
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
Technisch gesehen ist die Instanzprüfung nicht dasselbe wie die Unterklassenprüfung, was auch nicht dasselbe ist wie die Prüfung von mro. – o11c
@ o11c 'str .__ base__' gibt' object'. Aber 'NoneType .__ base__' gibt kein' object'. Ist die Eigenschaft '__bases__' relevant, um die Unterklasse zu prüfen? – overexchange
@overexchange 'Typ (keine) .__ Basen__ == (Objekt,)' für mich auf Python2.7 und Python3.5 – o11c