2012-04-09 12 views
0

ich ein Python-Programm haben und ich versuche, andere Python-Klassen zu importieren, und ich bin immer einen Nameerror:Import/Laufen Klassen in Python verursacht Nameerror

Traceback (most recent call last): 
    File "run.py", line 3, in <module> 
    f = wow('fgd') 
NameError: name 'wow' is not defined 

Diese in Datei new.py genannt wird:

Diese
class wow(object): 
    def __init__(self, start): 
     self.start = start 

    def go(self): 
     print "test test test" 
     f = raw_input("> ") 
     if f == "test": 
      print "!!" 
      return c.vov() 
     else: 
      print "nope"  
      return f.go() 

class joj(object): 
    def __init__(self, start): 
     self.start = start 
    def vov(self): 
     print " !!!!! " 

ist in der Datei run.py:

from new import * 

f = wow('fgd') 
c = joj('fds') 
f.go() 

Was ist Ich mache falsch?

+0

Wenn Sie Python-Fragen stellen, ist immer nützlich, um anzuzeigen, welcher Fehler in Ihrem Code aufgetreten ist. Dieser Fall kann ein leicht abzuleitender 'NameError' sein, aber einige andere Zeiten sind nicht so offensichtlich und es kostet Sie keinen Aufwand, solche Informationen hinzuzufügen. – C2H5OH

+0

Ist Ihr Einzug hier genauso wie in Ihren Dateien? Es sieht aus wie 'wenn f ==" test "' und folgendes ist ein Einzug auf der rechten Seite gemeint. – lvc

+0

'new' ist eine schlechte Namenswahl für Ihr Modul. Es gibt bereits ein (veraltetes) eingebautes Modul mit dem Namen 'new' –

Antwort

2

Sie können das nicht tun, da f in einem anderen Namespace ist.

Sie müssen Ihre Instanz wow Ihre joj Instanz übergeben. Um dies zu tun, so dass sie in die andere Richtung schaffen wir zuerst um, so c in f passieren existiert:

from new import * 

c = joj('fds') 
f = wow('fgd', c) 
f.go() 

und dann fügen wir die Parameter c zu wow, die Referenz als self.c Speicherung und Verwendung self statt f als f nicht in diesem Namensraum existiert - das Objekt, das Sie sich beziehen ist jetzt selbst:

class wow(object): 
    def __init__(self, start, c): 
     self.start = start 
     self.c = c 

    def go(self): 
     print "test test test" 
     f = raw_input("> ") 
     if f == "test": 
      print "!!" 
      return self.c.vov() 
     else: 
      print "nope"  
      return self.go() 

class joj(object): 
    def __init__(self, start): 
     self.start = start 
    def vov(self): 
     print " !!!!! " 

Denken Sie an jede Klasse und Funktion als Neuanfang, keine der Variablen, die Sie an anderer Stelle in sie definieren fallen.

+0

Sie müssen etwas mit 'c' in' wow .__ init__' machen, wenn Sie erwarten, dass es auch in 'wow.go' verwendet werden kann. Ich habe das nicht bearbeitet, um dies zu zeigen, denn das erfordert tatsächlich eine ganze Reihe neuer Erklärungen, von denen ich denke, dass Sie mehr als fähig sind, es zu schreiben :) Sie könnten auch etwas über die Verwendung von Rekursion sagen, um eine triviale Schleife zu erstellen ... –

+0

Verpasste diesen einen. Bearbeitet. –

+0

Ich hätte das nie dank gedacht !! –