Personal tools

xmlrpclibの__getattr__

Python 2.3からはxmlrpclibというライブラリが標準でつくようになりました。これを使うとXML-RPCのリクエストを簡単に送信できます。

   import xmlrpclib
   #xmlrpcサーバインスタンスを生成
   srv = xmlrpclib.Server('http://url.to.xmlrpc/server/')
   #XML-RPCリクエストを送信,結果を表示
print srv.path.to.method('arg1','arg2')

Pythonのxmlrpclibがイカしてると思うのは,サーバのインスタンスからドット区切りで階層を表現できること。ソースはこんな感じになっています。nameにドットで区切られた階層の文字列が渡ってきます。

       def __getattr__(self, name):
           # magic method dispatcher
           return _Method(self.__request, name)

で,_Methodの中身は以下。

   class _Method:
       # some magic to bind an XML-RPC method to an RPC server.
       # supports "nested" methods (e.g. examples.getStateName)
       def __init__(self, send, name):
           self.__send = send
           self.__name = name
       def __getattr__(self, name):
           return _Method(self.__send, "%s.%s" % (self.__name,   name))
       def __call__(self, *args):
           return self.__send(self.__name, args)

__getattr__を再帰的に呼び出しているんですね。__nameにドット区切りの階層が連結されて行きます。一番最後は関数呼び出しになっているので,__call__が呼ばれる,というわけ。おもしろいなあ:-)。

Category(s)
python
The URL to Trackback this entry is:
http://coreblog.org/ats/323/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
(Required)
コメントスパム避けのための認証文字列です

Captcha Image

Pythonな求人
r = urlopen("http://www.webcore.co.jp/recruit")
About this blog
■Author
atsこと柴田淳です。Atsushiはガイジンにうまく発音して頂けないので,これからはJunというペンネームで行こうと思っていましたがあんまり使ってません。
Webcore株式会社 代表取締役
■TRIVIAL TECHNOLOGIES 2.0
トリビアル・テクノロジー 2.0,「トリテク 2.0」と呼んでください。
Blog(ブログ)サイトです。Plone上で動く,オープンソースのBlog Product - COREBlog2を使っています。
 
最近書いた本,Mook
みんなのPython Webアプリ編
Pythonの基礎から,Webアプリやフレームワークの仕組みまで,つまることなく一気に学べる書籍です。「みんなのPython」と一緒に読んでください:-)。
みんなのPython
Pythonの入門書です。基本的なことから分かりやすく解説するよう勤めました。Pythonをはじめたいと思っている人,JavaやC++,PerlやRubyを学ぼうと思って躓いてしまった人はぜひ読んで下さい。
 

Powered by Plone, the Open Source Content Management System