Zunächst einmal ist True
1
nicht:
>>> True is not 1
True
Zweitens, wie die documentation sagt
dir([object])
[...] Mit einem Argument, Versuch um eine Liste gültiger Attribute für dieses Objekt zurückzugeben.
Wenn das Objekt eine Methode namens __dir__()
hat, wird diese Methode aufgerufen und muss die Liste der Attribute zurückgeben. Dies ermöglicht Objekten, die eine benutzerdefinierte __getattr__()
oder __getattribute__()
-Funktion implementieren, die Art und Weise anpassen, wie dir()
ihre Attribute meldet.
Wenn das Objekt __dir__()
nicht bereitstellt, versucht die Funktion, Informationen aus dem Objekt __dict__
, sofern definiert, und aus seinem Typobjekt zu sammeln. Die resultierende Liste ist nicht notwendigerweise vollständig und möglicherweise ungenau, wenn das Objekt über eine benutzerdefinierte __getattr__()
verfügt.
Die resultierende Liste ist alphabetisch sortiert. [...]
Nun int
und bool
haben sowohl die __dir__
Schlitz von object.__dir__
gefüllt:
>>> int.__dir__
<method '__dir__' of 'object' objects>
>>> bool.__dir__
<method '__dir__' of 'object' objects>
und die Dokumentation für object.__dir__
fügt diese ein zusätzliches Bit an Information :
object.__dir__(self)
aufgerufen, wenn dir()
auf dem Objekt aufgerufen. Eine Sequenz muss zurückgegeben werden. dir()
konvertiert die zurückgegebene Sequenz in eine Liste und sortiert sie.
Da die Dokumentation sagt, dir
konstruiert eine neue Liste für jeden Aufruf und dann Sorten es. (Wir könnten auch den Code für _dir_object
suchen, der PySequence_List
auf dem Rückgabewert __dir__
aufruft; PySequence_List
nimmt eine Sequenz als Argument und gibt eine neue Liste mit den gleichen Elementen wie die ursprüngliche Sequenz zurück, diese neu erstellte Liste ist dann sorted und returned)
>>> a = 1
>>> dir(a) is dir(a)
False
Drittens True
ist eine Instanz vom Typ bool
, die eine Unterklasse von int
ist.
>>> isinstance(True, bool)
True
>>> isinstance(1, int)
True
>>> issubclass(bool, int)
True
>>> isinstance(True, int)
True
Zusätzlich bool
fügt keine Methoden, die in int
nicht bereits vorhanden sind. Und weil die resultierende Liste ist alphabetisch sortiert,
>>> dir(1) == dir(True)
True
Sie haben sich selbst geantwortet. – Maroun
Sie zeigen auf zwei verschiedene Objekte, die zufällig den gleichen Inhalt haben –