Globale Variablendeklaration Python

7

Ich habe den folgenden Code, der eine Notiz erstellt und einem Notizbuch hinzufügt.

Meine Frage bezieht sich mehr auf die globale Variable last_id . Wenn ich es als Klassenvariable deklariere, d. H. Innerhalb der Klassennotiz, erhalte ich den folgenden Fehler, aber wenn ich außerhalb der Klasse deklariere, funktioniert mein Code einwandfrei.

Hier sind meine Klarstellungen:

  1. Warum akzeptiert es die Klassenvariable nicht?
  2. Warum muss last_id definiert werden, wenn ich es innerhalb meiner Funktion als globale Variable deklariere?

Error:

%Vor%

code.py

%Vor%     
user1050619 08.08.2012, 20:39
quelle

4 Antworten

9

python ist ein wenig expliziter, woher Attribute kommen als andere objektorientierte Sprachen; Sie können einen Zähler auf Klassenebene haben:

%Vor%

Sie müssen auf last_id als self.last_id verweisen, damit Python die Instanz sehen kann (und da die Klasse noch nicht da ist).

    
quelle
9

Wenn Sie

schreiben %Vor%

Innerhalb Ihrer Funktion erstellen Sie keine neue globale Variable. Was Sie gerade tun, ist "Anstatt eine neue lokale Variable zu erstellen und sie dem Namen last_id zuzuordnen, verknüpfen Sie diesen Namen stattdessen mit einer bereits vorhandenen Variablen im umschließenden Bereich, die den Namen last_id "

hat

Wenn es noch keine Variable namens last_id gibt, dann verweist global last_id auf nichts, bis Sie darauf schreiben. Wenn Sie jedoch darauf schreiben, wird es im globalen Bereich erstellt. Zum Beispiel:

%Vor%     
Gordon Bailey 08.08.2012 20:45
quelle
2

Die global -Anweisung bindet keinen Namen, sondern teilt dem Compiler lediglich mit, dass die Variable im globalen Gültigkeitsbereich neu gebunden werden soll. Sie müssen die anfängliche Bindung immer noch selbst durchführen.

    
Ignacio Vazquez-Abrams 08.08.2012 20:44
quelle
0

Python verwendet den innersten Bereich der Variablen, also dieses

%Vor%

funktioniert, aber das

%Vor%

wird nicht.

Sie könnten es als

umschreiben %Vor%     
dfb 08.08.2012 20:47
quelle

Tags und Links