__len__メソッド
インスタンスが有するデータの「長さ」に関する情報をlen関数【builtin】を用いて取得するための特殊メソッドである。長さの対象はそのインスタンスの役割に応じて定められる。例えば、
そのインスタンスが保持している文字列の長さ
そのインスタンスが保持しているベクトルの長さ
などを返すことが多い。作り方次第で「長さ」に関連しない情報を返すこともできるが、混乱を招くような実装は避けるべきである。
まず、ビルトインのlen関数【builtin】の動作を再確認しよう。
code:spmeth_len1.py
data = 1, 2, 3 ,2 ,1
print(len(data))
len関数を利用すると、リストやタプルなどのイテラブルオブジェクトの要素数(長さ)を得ることができる。
例えば、ある文字列を保持するインスタンスがあったとして、その文字列の長さを得るためのメソッドmylenを用意した。
code:spmeth_len1.py
class Myclass:
def __init__(self):
self.data = 'moji' # 文字列
def mylen(self):
i = 0
for c in self.data: # 文字列から1文字づつ取り出されることを利用
print(c, end=' ')
i += 1
print()
return i
c1 = Myclass()
x = c1.mylen() # (1):この行に注意
print('文字列長:', x)
(1)のように、メソッドの戻り値なので、
【変数】.mylen()
と記述することで、所定の値(文字列長)を取得する。
__len__メソッドを利用すると、ビルトイン関数のlen関数【builtin】によって取得することができる。
code:spmeth_len2.py
class Myclass:
def __init__(self):
self.data = 'moji'
def __len__(self): # 変更点
i = 0
for c in self.data:
print(c, end=' ')
i += 1
print()
return i
c1 = Myclass()
x = len(c1) # (1):変更点
print('文字列長:', x)
(1)のように、
len(【変数】)
とすると、インスタンスの __len__メソッドが呼び出される。