Python Developers Camp日記
listを継承したクラスを作ると何が変わるか。
>>> class MyList(list): pass >>> dir(MyList()) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__dict__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__str__', '__weakref__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] >>> [x for x in _ if not(x in dir(list))] ['__dict__', '__module__', '__weakref__']
この3つが増えている。
>>> set(dir(MyList())) - set(dir(list())) set(['__dict__', '__module__', '__weakref__'])
これでいいらしい。なるほど。
__ タプルの本質は括弧ではなく、カンマなのだけど、わかりにくいのでつまずきやすい。タプルの本質を括弧だととらえていると、(1, 2, 3)、 (1, 2)ときたら(1)と書きたくなってしまう。でもこれは1を括弧で囲ってあるだけ。 タプルの本質はカンマで、単に人間が見やすくするためだけに括弧が付いている。「not "a" in "abc"」でいいのに「not("a" in "abc")」と書いたりするのと同じ。要素が3つのタプルは「1, 2, 3」だけでなく「1, 2, 3,」でもOK。2個のは「1, 2」と「1, 2,」が可能だが、要素が1個のは「1」と書くとダメなので「1,」だけになる。
__ 「foo.setAge(20)」とやるべき所を「foo.setAge = 20」と間違えることが出来てしまうのがJavaの人にとっては罠。
__ 演算子オーバーロードなのか、オーバーライドなのか、という話題。 多重定義 - Wikipedia。Pythonでは「x + y」が「x.__add__(y)」というフックメソッドの呼び出しで多重定義されている。xが整数オブジェクトなのか文字列オブジェクトなのかによって異なるメソッドだから、多重定義。これが演算子オーバーロード。で、整数クラスを継承した自作のクラスでその__add__メソッドをオーバーライドすると、足し算の挙動が変わる。これは単に「親クラスのメソッドをオーバーライドすると挙動が変わる」ってだけ。 同時に似た名前のことをやっているので紛らわしい。
__ 出先ではJavaScriptのリファレンスがなくて不便。 Pythonのドキュメントは個々の関数の説明の前にアンカーが付いてたりしないかと期待したけど残念ながらそうではない。代わりに<tt id='l2h-8' xml:id='l2h-8' class="function">なんてのが付いていたりする。
西尾泰和のブログ: Pythonドキュメントの日英マッピングをするGreaseMonkeyできました。「リンク先のページのxml:id='l2h-8'があるところへジャンプ」ってのがJavaScriptで出来るといいんだけど、どうすればいいんだろう。
__ 西尾泰和のブログ: 対応づけられたサイトの切り替えをするブックマークレット に進化しました。 あー、でも実際のユースケースを考えると、Googleの検索画面から直接使える方が便利かもなぁ。
__ なんだかすごく遠回りをしてしまったけど、アンカータグじゃないタグでもid="xxx"ならurlに#xxxってつけるだけでその位置に飛べるようですね。少なくともIEとFirefoxでは。それなら、もっとうまい方法があるかも…。
__ オーバーライドすべきメソッドであることを示すためにassert 0, "some message"と書く手もあるようだ。raiseでもいいのだけど。
__ 「Googleで訳語のわからない英語を検索して対応する和文に飛んで訳語を確認」というのをやろうと思ってせっかくURLのマッピングをするjsを作ったのに、バージョン2.4の英文ドキュメントに対してGoogleで検索しても、なんか引っかかってこない。functionが3カ所しか使われていないとかあり得ない。何が起きているのだろう。
仕方ないなぁ。英文は全部まとめたzipが落ちていたのでローカルに置いてあるから、Googleデスクトップを入れてそこから検索するというのも一つの手だけどなぁ。ううむ。自前で検索するプログラムを作るというのも一つの手だけどなぁ。というかインデクスを作らない片っ端からファイルを開いて読んで検索する物ならすでに作ってあるのだけど、Pythonの標準出力にファイル名が出てもなぁ。リンクが出て要約もでてクリックすればジャンプできるGoogleっぽいのがいいんだけどな。
__ リモートを妹に変えると面白い単語。リモート監視システム。リモートとの同期/差分。リモートコントローラー。リモートメンテナンス。リモートアシスタント。リモートリポジトリ。リモートセンシング。インターネット を使ったリモート教育。【コラム】ツールエキスパート 第1回 リモート管理もユビキタス? - VNC(1) (MYCOMジャーナル)。リモートのグラフィカルデバッグ。Microsoft SQL Server 2000 がリモート攻撃者のDosマウントを容認する。
__ DjangoのWindowsへのインストールは小学生でもできるくらい簡単だった。ダウンロードしてダブルクリックするだけだし。開発用のサーバを立てるまでもチュートリアルを読んだら簡単。流し読んだけど対話的に色々試せるようですね。もう眠い。
エレメントのIDと、次のIDが振られたエレメントまでの文章がデータベースに入れてあり、クエリを指定するとデータベースからマッチする行を選択して、その英文サイトへのリンクと和文サイトへのリンクを表示すればいいのか。いや、IDと英文と和文をデータベースに入れて、サマリー部分で並べて表示すれば、場合によってはリンクをクリックして飛ぶ必要すらない。詳しく見たいときだけリンク先を見ればいいし。で、ビューとしては検索フォームと、検索結果の表示があればいいのかな。