2008-11-03 6 views
7

In einem Programm, das ich schreibe, wollte ich einen ConfigParser erstellen, der schreibgeschützt ist, sodass er global sicher verwendet werden kann. Ich habe das nicht erkennen, aber anscheinend die SafeConfigParser ist eine im alten Stil Klasse, so hatte ich es so zu Unterklasse:Ist es sicher, eine Old-Style-Klasse mit Multiple Inheritance in eine New-Style-Klasse umzuwandeln?

class ConstParser(SafeConfigParser, object): 
    """This is a implementation of the SafeConfigParser that can't 
     write any values. This is to ensure that it can only be filled 
     once and won't get messy with multiple modules writing to it.""" 
    def __init__(self, files, defaults={}): 
     super(ConstParser, self).__init__(defaults) 
     self.read(files) 
    def set(self, *args, **argd): 
     raise NotImplementedError() 
    def write(self, *args, **argd): 
     raise NotImplementedError() 
    def remove_option(self, *args, **argd): 
     raise NotImplementedError() 
    def remove_section(self, *args, **argd): 
     raise NotImplementedError() 

Wenn ich nicht Objekt als mixin, der Aufruf von SafeConfigParser der Verwendung __init__ Methode hat nicht funktioniert. Ich bin mir sicher, dass es bessere Möglichkeiten gibt, das zu tun, was ich tun möchte, aber jetzt bin ich neugierig: Ist das im Allgemeinen ok?

Ich meine, ich kann mir keinen Grund vorstellen, warum das eine schlechte Sache wäre, aber es gibt mir immer noch schlechte Gefühle. Sind sie gerechtfertigt, oder bin ich nur paranoid?

Antwort

2

den Anruf ersetzen:

super(ConstParser, self).__init__(defaults) 

mit:

SafeConfigParser.__init__(self, defaults) 

und es funktioniert ohne Mehrfachvererbung just fine.

+0

Aber das ist der alte Stil, dem er gerne entkommen würde ... – Jake

+0

Es gibt nicht wirklich einen Grund gewaltsam veraltete Klassen aus der Standardbibliothek zu verbauen, sie funktionieren einfach gut so wie sie sind. Wenn es einen guten Grund dafür gäbe, dass der ConfigParser eine Klasse neuen Stils wäre, wäre es jetzt ... –

+0

Eigentlich gibt es einen WIRKLICH guten Grund: neuere Sprachkonstrukte (dh Deskriptoren> Eigenschaften ..) funktionieren nicht mit alten Stilklassen ... – Jake

Verwandte Themen