2017-12-31 116 views
0

Ich lerne Netzwerkprogrammierung mit o'REilys Twisted Netzwerkprogrammierung wesentlicher Leitfaden. (mit pycharm IDE)Wie wird die Klasse "QuoteClientFactory" nicht als Defined in pycharm verstanden?

Ich habe zwei Probleme, die Funktion MaybeStopReactor() wird in Pycharm nicht erkannt und QuoteClientFactory ist nicht als eine definierte Klasse gesehen.

Wie kann ich eine Lösung dafür finden?

class QuoteClientFactory(protocol.ClientFactory): 
    def __init__(self, quote): 
     self.quote = quote 

    def buildProtocol(self, addr): 
     return QuoteProtocol(self) 

    def clientConnectionFailed(self, connector, reason): 
     print("connecton failed:"), reason.getErrorMessage() 
     **maybeStopReactor()** 

    def clientConnectionLost(self, connector, reason): 
     print("connection lost"), reason.getErrorMessage() 
     maybeStopReactor() 

    def maybeStopReactor(self): 
     global quote_counter 
     quote_counter -=1 
     if not quote_counter: 
      reactor.stop() 

    quotes = [ 
     "you snooze you lose", 
     "The early bird gets the worm", 
     "carpe diem" 
    ] 

    quote_counter = len(quotes) 

    for quote in quotes: 
     **reactor.connectTCP('localhost', 6942, QuoteClientFactory(quote))** 
    reactor.run() 
+1

Sie können nicht auf eine Klasse vor dem Ende seiner Definition verweisen, wie, ja, es ist noch nicht definiert. Beachten Sie, dass Methodenkörper während der Klassendefinition nicht ausgeführt werden. Daher kann die Klasse in ihren eigenen Methoden verwendet werden. Vielleicht möchten Sie alles von "quotes = ..." – schwobaseggl

Antwort

1

Ihre Einrückung ist falsch. Es ist ein bisschen schwer zu sehen, da der Code einen Seitenumbruch umfasst. Was Sie wollen, ist:

class QuoteClientFactory(protocol.ClientFactory): 
    def __init__(self, quote): 
     self.quote = quote 

    def buildProtocol(self, addr): 
     return QuoteProtocol(self) 

    def clientConnectionFailed(self, connector, reason): 
     print("connecton failed:"), reason.getErrorMessage() 
     maybeStopReactor() 

    def clientConnectionLost(self, connector, reason): 
     print("connection lost"), reason.getErrorMessage() 
     maybeStopReactor() 

def maybeStopReactor(): 
    global quote_counter 
    quote_counter -=1 
    if not quote_counter: 
     reactor.stop() 

quotes = [ 
    "you snooze you lose", 
    "The early bird gets the worm", 
    "carpe diem" 
] 

quote_counter = len(quotes) 

for quote in quotes: 
    reactor.connectTCP('localhost', 6942, QuoteClientFactory(quote)) 
reactor.run() 
+0

in das verdrehte Buch einsteigen lassen. Die Beispielausgabe ist "Erhaltenes Zitat: der frühe Vogel bekommt den Wurm" aber was ich bekomme, ist gerade Erhaltenes Zitat: Haben Sie irgendwelche Vorschläge wie kann man das beheben? Ich bin mir nicht sicher, wonach ich suchen soll? –

+0

Welche Version von Python verwenden Sie? – Batman

+0

Ich benutze Python 3.6.2 und ich benutze pycharm für die IDE. Sollte ich eine andere IDE versuchen? –

Verwandte Themen