2017-09-15 4 views
0

Hier ist Beispiel, hier ist Code Schnipsel aus gebautet Python Logging:Zwingende _open Methode

class StreamHandler(Handler) 
    def __init__(self, stream=None): 
     Handler.__init__(self) 
     self.stream = stream 

class FileHandler(StreamHandler): 
    def __init__(self, filename, mode='a'): 
     StreamHandler.__init__(self, self._open()) 

    def _open(self): 
     stream = open(self.name, self.mode) 
     return stream 

class MyFileHandler(FileHandler) 
    def _open(self): 
     stream = open(self.name, self.mode, 0) 
     return stream 

ich die _open Funktion außer Kraft zu setzen versuchen. Also habe ich oben und funktioniert nicht. Wie überschreibe ich _open in obigem Fall?

Antwort

0

Ich habe keine Ahnung, wo Sie diese Klassen von tbh bekommen haben. Filehandler, wie im Modul logging verwendet, ist in logging.__init__ definiert und in seiner __init__ setzt es eine Reihe von Attributen, die Sie in Ihrem _open Aufruf verwenden sollten. Speziell self.baseFilename, der Name der zu verwendenden Datei.

Ihre Klasse, mit _open implementiert das einzige, was sein sollte wie folgt aussehen:

from logging import FileHandler 

class MyFileHandler(FileHandler): 
    def _open(self): 
     stream = open(self.baseFilename, self.mode, 0) 

und da Sie Pufferung 0 gesetzt, sollten Sie einen Modus zur Verfügung stellen sie binär zu öffnen.

0

Danke. Sorry Code war Schnipsel. Ich importiere vom Protokollierungsmodul.

class FileHandler(StreamHandler): 
    def __init__(self, filename, mode='a'): 
     StreamHandler.__init__(self, self._open()) <-- 

Ich möchte den Strom außer Kraft zu setzen (oben zweites Argument), die übergeben wird init