从python中的xmlrpclib.ServerProxy继承

时间:2011-04-12 13:50:27

标签: python

为什么这段代码不起作用?

#!/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'>

1 个答案:

答案 0 :(得分:3)

答案隐藏在此SO post

self.__host中的成员ServerProxy是使用双下划线命名声明的,这意味着它不应该被派生类访问。为此,解释器在内部以_className__memberName形式破坏其名称 - Python不是C ++,并将“私有”符号视为强烈提示,而不是绝对禁止。

当使用双下划线前缀编写代码时,您可以像

一样访问它
class ServerProxy1(ServerProxy):
    def __str__(self):
        return str(self._ServerProxy__host)

..但如果ServerProxy类的未来版本更改其内部实现并破坏您的代码,您不应该感到惊讶。