继承自python中的xmlrpclib.ServerProxy
为什么这段代码不起作用?
#!/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__
结果:
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'>
答案隐藏在这个SO帖子中
ServerProxy类中的成员self.__host是使用双下划线命名来声明的,这意味着它不应该被派生类访问。 为此,解释器以_className__memberName的形式在内部_className__memberName它的名称 - Python不是C ++,并将该“私有”符号视为强大提示,而不是绝对禁止。
当使用双下划线前缀编写代码时,您可以像访问它一样
class ServerProxy1(ServerProxy):
def __str__(self):
return str(self._ServerProxy__host)
..但是如果ServerProxy类的未来版本更改其内部实现并破坏代码,则不应该感到惊讶。
上一篇: inheritance from xmlrpclib.ServerProxy in python
下一篇: creating Python classes with arbitrarily substituted attribute name
