@BlackJack: Ob Du nun eine neue Klasse schreibst oder von einer bestehenden ein Klassen-Attribut änderst, macht keinen Unterschied, solange Instanzen der geänderten Klasse nicht auch noch woanders verwendet werden. Und dies ist ja hier nicht der Fall. Aber im Prinzip ist das schon richtig: im zweiten Fall lauern potentiell Seiteneffekte.
Was ich für den OP gerne hätte, wäre so etwas:
Code: Alles auswählen
handler = get_signature_handler(SimpleHTTPRequestHandler, 'MySuperServer')
Daher meine ursprüngliche Idee einer Instanz-Variablen. Aber nicht jede Idee ist eine gute Idee und wenn ich in den Sourcecode schaue, wäre dies, von der Sinnhaftigkeit einmal abgesehen, auch gar nicht so einfach umzusetzen.
Am saubersten ist in der Tat eine separate Klasse mit eigenem Klassen-Attribut. Für jede Anwendung aber alleine wegen der Server-Information einen eigenen Handler schreiben zu müssen, ist auch nicht so toll. Zum Glück geht das auch 'einfacher':
Code: Alles auswählen
def get_signature_handler(handler, server_version='', sys_version=''):
d = {'server_version': server_version, 'sys_version': sys_version}
return type('SignatureHandler', (handler,), d)
Das ist natürlich auch nur wieder eine weitere Idee und muss nicht der Weisheit letzter Schluß sein ...