2011-04-12 84 views
0

爲什麼這段代碼不起作用?繼承自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'> 
+1

「」「不起作用」意味着什麼? – 2011-04-12 13:53:02

回答

3

答案在此SO post

隱藏成員self.__hostServerProxy是申報d使用雙下劃線命名,這意味着它不應該被派生類訪問。爲此,解釋器在內部以_className__memberName的形式破壞其名稱--Python不是C++,並將該「私有」符號視爲強烈提示,而不是絕對禁止。

當代碼與雙下劃線前綴寫的,你可以像

class ServerProxy1(ServerProxy): 
    def __str__(self): 
     return str(self._ServerProxy__host) 

訪問它..但如果ServerProxy類的未來版本中改變其內部實現,打破你的,你不應該感到驚訝碼。

+2

雙下劃線名稱迷惑!這真的是我真正討厭Python的唯一特性。進一步閱讀:http://docs.python.org/tutorial/classes.html#private-variables – jathanism 2011-04-12 14:18:49