タグ

2014年7月21日のブックマーク (4件)

  • [Python][お勉強] Python入門(50) - 演算子のオーバーロード

    演算子が呼ばれると、対応する__XXX__といった前後にアンダースコアがつけられた関数が呼ばれる。また、そういったメソッドを他の通常のメソッドと区別して「フックメソッド」と呼ばれる。 __getitem__ __getitem__はインデクシングの処理に対応する「フックメソッド」。 対象クラスに定義されているか、対象クラスの継承ツリーに定義されていないとコールされない。 以下、__getitem__の例 >>> class C1: ... def __getitem__(self, index): ... return index * 100 ... >>> a = C1() >>> a[0] 0 >>> a[1] 100 >>> a[2] 200 >>> a[3] 300 >>> この__getitem__メソッドはループにも対応可。 >>> for b in a: ... if b >

    axnsword
    axnsword 2014/07/21
    演算子 オーバーロード __add__ __sub__ __getattr__ __setattr__
  • インスタンスメソッド・クラスメソッド・スタティックメソッド - PASL

    Pythonで扱われるこれらのメソッドの違いを調べてみた。結論から言うと、これらのメッソドの違いは「インスタンス変数にアクセス可能か」、「継承時に親・子クラスのどちらのクラス変数を参照するか」の2つの観点で異なる。 メソッド インスタンス変数へのアクセス どちらのクラス変数を参照するか インスタンスメソッド 可 親 クラスメソッド 不可 子 スタティックメソッド 不可 親 ここで注意したいのは「親クラス」のクラス変数を変更すると「必ず」子クラスのクラス変数が変更されるということ。また当然のこととして、子クラスのインスタンス変数変更が親クラスのインスタンス変数を変更したりはしない。 具体例をつくってみた。method_example.pyというファイル名で保存。 class Boku(object): # これはクラス変数 subject = "ぼくは" name = "ドラえもん" def

    インスタンスメソッド・クラスメソッド・スタティックメソッド - PASL
  • http://www17.atpages.jp/~lambda7/py/decorator.html

    axnsword
    axnsword 2014/07/21
    デコレータ @ ベンチマーク
  • Pythonでディレクトリの上層にあるモジュールをimportするときの注意点 - 長時間睡眠記

    さて、今日は何かと忌み嫌われがちな「Pythonのimport文」についての記事を書きたいと思います。 その中でも特に、「今編集しているスクリプトより上層のディレクトリにあるモジュールをimportしたくなった」時にハマるケースについて取り上げます。 今、次のようなファイル構成でPythonのアプリケーション(モジュール)を書いていたとします。 my_module/A/A.pyを編集中, B/B.pyの機能が使いたくなったとします。 Pythonでは, from ... import ...の構文でimportを行う場合に 相対パスを指定する事ができるので、 my_module/B/__init__.pyに import Bと書いておき、 from ..B import B と書く事でmy_module/B/B.pyをインポートすることにします。 ところが、ここで動作確認をしようとして、

    Pythonでディレクトリの上層にあるモジュールをimportするときの注意点 - 長時間睡眠記
    axnsword
    axnsword 2014/07/21
    相対パスを用いたimportを使っているPythonプロジェクトでは、 動作確認にはそのプロジェクトのディレクトリの外にテスト用の スクリプトを置いてそれを実行することになります。