2017-03-13 27 views
0

Undefinierter Variablenname scheint ein häufiges Problem zu sein, und ich habe den genauen Prozess als einige der Beispiele hier verfolgt, aber ich hatte keinen Erfolg.Undefinierter Variablenname für Klassenvariable

Aus was ich verstehe, müssen Sie eine Klasse erstellen, wenn Sie mehrere Funktionen haben, und dann eine Instanz der Klasse erstellen, um diese Methoden aufzurufen.

Hier ist mein Pseudo-Code:

start = KMP() 
start.read() 


class KMP: 

    def read(self): 
     Text = "AGABBBACC" 
     Pattern = "BBB" 
     result = self.kmp(self, Pattern, Text) 

    def kmp(self, Pattern, Text): 
     ........ 
     ........ 
     return self.numOcc` 

ich einen undefinierten Namen 'KMP' bekommen, und ich verstehe wirklich nicht, warum. Könnte jemand mir helfen, diesen Fehler zu lösen?

+0

In welcher Zeile tritt dieser Fehler auf? – AlexanderRD

+0

@AlexanderRD es erschien am Anfang des Codes, 'start = KMP()' – user180708

Antwort

2

Sie müssen etwas definieren, bevor Sie es verwenden. In Ihrem Fall versuchen Sie, eine Instanz der Klasse KMP vor dem Code zu erstellen, der KMP definiert.

Sie müssen Ihre erste Anweisung nach dem Punkt verschieben, an dem Sie die Klasse definieren.

class KMP: 

    def read(self): 
     Text = "AGABBBACC" 
     Pattern = "BBB" 
     result = self.kmp(self, Pattern, Text) 

    def kmp(self, Pattern, Text): 
     ........ 
     ........ 
     return self.numOcc` 

start = KMP() 
start.read() 
+0

Oh so eine einfache Lösung! Ich bin an eine Java-ähnliche Implementierung gewöhnt, in der wir zum Zeitpunkt des Codes Hauptmethoden schreiben. Bin ich richtig, wenn ich meine "Selbst" -Sätze hinzufüge? Ich weiß, dass ich "result = self.kmp ..." schreiben muss, basierend auf anderen Antworten, aber ich bin mir nicht sicher, ob ich sie auch in den Argumenten verwenden muss. Ich habe versucht, das zu recherchieren, habe es aber nicht gesehen als exakte Antwort – user180708

+0

Wenn Sie möchten, können Sie oben eine 'main'-Funktion für Ihre Hauptlogik definieren, aber Sie müssen am Ende des Skripts noch einen Aufruf von' main' hinzufügen. –