Python.use(better)

前の記事記事一覧次の記事
Python.use(better)


課題:ベクトル演算《クラス版》

def __init__(self, *args):



このふざけた世界では、何事も永遠には続かない
我々の悩みでさえも
Charlie Chaplin - Wikipedia

《関連記事》

-

■ 事例:モジュールを起動する
□ 全項目を確認する

関数 do を利用すると、全ステップの「項目」を確認できます。

$ python -i vector.py
>>> do()
...
 1: step01 -- def __init__(self, *args):
□ 各項目を実行する

関数 do に引数を指定すると、各ステップの「動作」を確認できます。

>>> do(1)
>>> # -------------------------------------------------- step01
>>> v  = Vector(); v
()
>>> v1 = Vector(3,4); v1
(3, 4)
>>>
  • 引数を指定せずに、Vectorインスタンス v(ベクトル)を生成すると、なにも要素を保持しないのが分かります。
  • 引数を指定して、Vectorインスタンス v1(ベクトル)を生成すると、指定した数の要素を保持するのが分かります。
《余録》テストケース
def ex_vector1(local):                      #@:
    ex_vector0(local)

    source = '''
v1 = Vector(3,4); v1
'''.split("\n")

    do_it(source, local)

既存のテストケース(ここでは ex_vector0)を再利用するとともに、その差分情報だけを追記します。

■ 事例:コードの解説
    class Vector(object):
        def __init__(self, *args):
            self.elements = list(args)
        def __repr__(self):
            return "(%s)"%", ".join(map(str, self.elements))

    ## ----------------------------------------
    local = locals()
    ex_vector1(local)
□ 特殊メソッド __init__
        def __init__(self, *args):
            self.elements = list(args)

メソッド __init__ では、クラス呼び出し Vector() に呼応して、生成したインスタンスを初期設定します。ここでは、引数に指定した各要素が、ベクトルの成分となります。

  • インスタンス属性 elements は、ベクトルの各要素(成分)を列挙したリスト list を束縛します。
  • 組み込み関数 list は、シーケンス args を構成する各要素(引数)を列挙したリストを生成します。

《Note》組み込み関数 list
インスタンス属性 elements が、list で規定したプロトコルに準拠することを保証します。

□ 特殊メソッド __repr__
        def __repr__(self):
            return "(%s)"%", ".join(map(str, self.elements))

メソッド __repr__ では、組み込み関数 repr に呼応して、オブジェクトに固有の文字列表現を規定します。ここでは、ベクトルの成分を列挙した文字列を生成します。

  • 組み込み関数 str は、文字列を生成します。
  • 組み込み関数 map は、関数 str を self.elements の各要素に適用して、各要素の文字列表現を列挙します。
  • メソッド join は、各要素(文字列)を連結した文字列を生成します。

《Note》組み込み関数 str
メソッド join で連結する対象が文字列であることを保証します。


》こちらに移動中です《

TOP

関連記事

Last updated♪2009/12/09