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
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a