Почему list() вызывает __len__()?Python

Программы на Python
Ответить
Anonymous
 Почему list() вызывает __len__()?

Сообщение Anonymous »

Код установки:

Код: Выделить всё

class MyContainer:
def __init__( self ):
self.stuff = [ 1, 2, 3 ]

def __iter__( self ):
print( "__iter__" )
return iter( self.stuff )

def __len__( self ):
print( "__len__" )
return len( self.stuff )

mc = MyContainer()
Теперь в моей оболочке:

Код: Выделить всё

>>> i = iter( mc )
__iter__
>>> [ x for x in i ]
[1, 2, 3]
>>> list( mc )
__iter__
__len__
[1, 2, 3]
Почему __len__() вызывается из list()? И где это задокументировано?


Подробнее здесь: https://stackoverflow.com/questions/793 ... t-call-len
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»