Bedingte Anweisungen in einer Klasse, jedoch außerhalb des Gültigkeitsbereichs der Funktion

8

Wir wissen das mit Notation:

%Vor%

Wir können die statische Variable Foo.a , die 'normale' Variable b erstellen, die nach dem Erstellen und der Instanz von Foo und der Methode c

verfügbar ist

Heute war ich wirklich überrascht, dass ich bedingte Anweisungen in einer Klasse verwenden kann, aber außerhalb des Gültigkeitsbereichs der Funktion

%Vor%

Sprachen wie C ++ / Java haben mich gelehrt, dass die Rechtsnotation ähnlich ist wie:

%Vor%

Können Sie andere Regeln beschreiben, die sich auf diesen spezifischen Bereich beziehen? Wie sollte ich diesen Umfang nennen?

    
noisy 01.12.2014, 14:35
quelle

2 Antworten

11

Der Klassenkörper ist nur Python-Code . Es hat spezifische Bereichsregeln, aber sonst geht alles anders. Das heißt, Sie können Funktionen bedingt anlegen:

%Vor%

oder ziehen Sie Methoden von anderswo:

%Vor%

usw.

Die Python-Dokumentation für class -Definitionen lautet:

  

Eine Klassendefinition ist eine ausführbare Anweisung.

und

  

Die Suite der Klasse wird dann in einem neuen Ausführungsrahmen ausgeführt (siehe Abschnitt Benennung und Bindung ) und verwendet einen neu erstellten lokalen Namespace und den ursprünglichen globalen Namespace. (Normalerweise enthält die Suite nur Funktionsdefinitionen.) Wenn die Ausführung der Klasse beendet ist, wird der Ausführungsrahmen verworfen, aber der lokale Namespace wird gespeichert. Ein Klassenobjekt wird dann mit der Vererbungsliste für die Basisklassen und dem gespeicherten lokalen Namespace für das Attributverzeichnis erstellt.

Beachten Sie normalerweise in diesem Text. Im Wesentlichen wird der Klassenkörper als Funktion ausgeführt, und alles, was Sie in den Body-Namespace eingeben, wird zu einem Attribut für die Klasse.

Der Abschnitt * Benennen und Binden sagt Ihnen dann Folgendes:

  

Der Geltungsbereich der in einem Klassenblock definierten Namen ist auf den Klassenblock beschränkt; es erstreckt sich nicht auf die Codeblöcke von Methoden

Namen, die Sie in diesem Block definieren, können nicht direkt in Methoden aufgerufen werden; Sie würden stattdessen class.name oder self.name verwenden.

    
Martijn Pieters 01.12.2014, 14:39
quelle
1

In Java ist alles classes und object , classes sind Container, aber in Python ist alles object . Classes sind auch objects . wie functions(also objects) , wenn Sie in der Funktion eine bedingte Anweisung verwenden, dann können Sie dies auch in Python tun.

wie: -

%Vor%

ist gleich

%Vor%

Sie können Funktionen zuweisen, die sogar in einer Variablen gespeichert werden, wie Sie es für Klassen tun

%Vor%

In Java können Sie keine Funktion außerhalb der Klassen definieren.

    
Vishnu Upadhyay 01.12.2014 14:42
quelle