inheritance from xmlrpclib.ServerProxy in python
Why this code doesn't work ?
#!/usr/bin/python2 from xmlrpclib import ServerProxy class ServerProxy1(ServerProxy): def __str__(self): return str(self.__host) proxy = ServerProxy1("http://workshop:58846/") print proxy
Original_str_:
def __repr__(self): return ( "" % (self.__host, self.__handler) ) __str__ = __repr__
Result:
File "/usr/lib/python2.7/xmlrpclib.py", line 793, in close raise Fault(**self._stack[0]) xmlrpclib.Fault: :method "_ServerProxy1__host.__str__" is not supported'>
The answer is hiding in this SO post
The member self.__host
in class ServerProxy
was declared using the double-underscore naming that's meant to indicate that it shouldn't be accessed by derived classes. To do this, the interpreter mangles its name internally in the form _className__memberName
-- Python isn't C++, and treats that 'private' notation as a strong hint, not as an absolute prohibition.
When code is written with the double underscore prefix, you can access it like
class ServerProxy1(ServerProxy):
def __str__(self):
return str(self._ServerProxy__host)
..but you shouldn't be surprised if a future version of the ServerProxy
class changes its internal implementation and breaks your code.