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