いくつかのコンテナ オブジェクトを実装します。
class A:
def __init__(self, L):
self.L = list(L)
def __len__(self):
return len(self.L)
class B:
def __init__(self, L):
self.L = list(L)
self.__len__ = self.L.__len__
最初のケースでは、len()
と.__len__()
>>> a = A(range(10))
>>> a.__len__()
10
>>> len(a)
10
しかし、2番目のケースでは、でエラーが発生しlen()
ます。
>>> b = B(range(10))
>>> b.__len__()
10
>>> len(b)
Traceback (most recent call last):
File "<pyshell#93>", line 1, in <module>
len(b)
TypeError: object of type 'B' has no len()
- なぜ
len()
2 番目のケースでは機能しないのに、.__len__()
定義されて正しく機能するのですか? - 一般に、あるオブジェクトから別のオブジェクトにいくつかのメソッドを割り当てることは問題ありませんか? 私がしたように
self.L.__len__()
。