Python.use(better) #特殊メソッド __len__

記事一覧 Python.use(better)《Python3.1》

特殊メソッド __len__

《著》小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28

特殊メソッド __len__

>>> help(str.__len__)
...
__len__(...)
    x.__len__() <==> len(x)

メソッド __len__ は、組み込み関数 len に呼応して、オブジェクトを構成する要素数を規定します。

■ 全項目を確認する

全ステップの「項目」を確認するには、関数 do を利用します。

$ python -i special_method.py
>>> do()
@: tips_len -- len(...)
...
>>>
■ 各項目を実行する

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

>>> do(@)
>>> # -------------------------------------------------- tips_len
>>> s = Tips(); len(s)                           #1:
TypeError: object of type 'Tips' has no len()
>>> s = Tips(); len(s)                           #2:
0
>>> s = Tips(); len(s)                           #3:
ValueError: __len__() should return >= 0

事例:コードの解説

    class Tips(object): pass

メソッド __len__ を定義しないと、次のように

>>> s = Tips(); len(s)                           #1:
TypeError: object of type 'Tips' has no len()

例外 TypeError を生成して、エラーメッセージが出力されます。

■ メソッド __len__ を定義する
    class Tips(object):
        def __len__(self):
            return 0

メソッド __len__ を定義すると、次のように

>>> s = Tips(); len(s)                           #2:
0

リターン値として整数 0 が出力されます。

■ メソッドのリターン値
    class Tips(object):
        def __len__(self):
            return -1

リターン値として負数を指定すると、次のように

>>> s = Tips(); len(s)                           #3:
ValueError: __len__() should return >= 0

例外 ValueError を生成して、エラーメッセージが出力されます。

  • リターン値には、0 以上の値を指定する必要があります。

》こちらに移動中です《
TOP


関連記事

Last updated♪2009/10/27