Wie kann ich das gleiche für eine Variable tun? Im Gegensatz zu Funktionen haben Python-Variablen nicht das __name__
Attribut.
Das Problem tritt auf, weil Sie über Terminologie, Semantik oder beide verwirrt sind.
"Variablen" gehören nicht in dieselbe Kategorie wie "Funktionen". Eine "Variable" ist kein Ding, das während des Code-Ablaufs Speicherplatz einnimmt. Es handelt sich um nur einen Namen, der in Ihrem Quellcode existiert - damit Sie beim Schreiben des Codes erklären können, über welches Ding Sie sprechen. Python verwendet Namen im Quellcode, um sich auf (d.h., einen Namen für) Werte zu beziehen. (In vielen Sprachen ist eine Variable eher wie ein Name für einen bestimmten Speicherort im Speicher, an dem der Wert gespeichert wird. Aber in Python benennen die Namen tatsächlich das betreffende Ding.)
In Python ist eine Funktion ein Wert. (In einigen Sprachen ist dies nicht der Fall; obwohl Bytes im Speicher verwendet werden, um den tatsächlichen ausführbaren Code darzustellen, handelt es sich nicht um einen diskreten Speicherbereich, mit dem die Programmlogik direkt interagieren kann.) In Python ist jeder Wert ein Objekt, was bedeutet, dass Sie ihm frei Namen zuweisen, ihn als Argument übergeben, ihn aus einer Funktion zurückgeben, usw. können. (In vielen Sprachen ist dies nicht der Fall.) Objekte in Python haben Attribute, auf die Sie mit der .
Syntax zugreifen. Funktionen in Python haben ein __name__
Attribut, das zugewiesen wird, wenn die Funktion erstellt wird. Speziell, wenn eine def
Anweisung ausgeführt wird (in den meisten Sprachen funktioniert die Erstellung einer Funktion ganz anders), wird der Name, der nach def
erscheint, als Wert für das __name__
Attribut verwendet und auch, unabhängig davon, als Variablenname, der das Funktionsobjekt zugewiesen wird.
Aber die meisten Objekte haben kein solches Attribut.
Anders ausgedrückt, wenn ich eine Variable habe wie:
Das ist der Punkt: Sie haben die Variable nicht im Sinne von, wie Sie denken. Sie haben das Objekt, das von dieser Variable benannt wird. Alles andere hängt von den zufällig in einem anderen Objekt gespeicherten Informationen ab - wie z.B. dem locals()
der umgebenden Funktion. Es wäre jedoch besser, die Informationen selbst zu speichern. Anstatt sich auf einen Variablennamen zu verlassen, um Informationen für Sie zu tragen, bauen Sie explizit die Zuordnung zwischen dem Zeichenfolgennamen, den Sie für das Objekt verwenden möchten, und dem Objekt selbst.