[Python] Estendere xmlrpclib.ServerProxy
Daniele Varrazzo
piro a develer.com
Ven 5 Ott 2012 18:13:38 CEST
On 2012-10-05 16:43, Maurizio Totti wrote:
> Ciao,
> sono (da sempre) alle prime armi con Python e vorrei estendere la
> classe xmlrpclib.ServerProxy della libreria xmlrpclib (per usare un
> proxy http se definito sulla mia linuxbox), ma sbaglio qualcosa.
>
> Per esempio se provo anche solo a fare così:
>
> Python 2.7.3rc2 (default, Apr 22 2012, 22:30:17)
> [GCC 4.6.3] on linux2
> Type "help", "copyright", "credits" or "license" for more
> information.
>>>> import xmlrpclib
>>>> class Pluto(xmlrpclib.ServerProxy):
> ... def __init__(self, *args, **kw):
> ... super(Pluto, self).__init__(self, *args, **kw)
Nota che dovrebbe essere
super(Pluto, self).__init__(*args, **kw)
ma non è questo il problema.
>>>> b = Pluto("http://127.0.0.1/blog/xmlrpc.php")
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "<stdin>", line 3, in __init__
> TypeError: must be type, not classobj
>
> Cercando a giro ho trovato questo
>
> http://stackoverflow.com/questions/489269/python-super-raises-typeerror-why
> e mi è venuto il dubbio che potrebbe dipendere anche da com'è fatta
> xmlrpclib... O forse ho semplicemente sbagliato :-)
Sì, il motivo è quello: è una classe "vecchio stile". Non supporta
super (e non si comporta in maniera educata con l'ereditarietà
multipla): devi usare
xmlrpclib.ServerProxy.__init__(self, *args, **kw)
(questa volta il self lo devi passare esplicito, non come col super())
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
Maggiori informazioni sulla lista
Python