Anonymous
Почему list() вызывает __len__()?
Сообщение
Anonymous » 16 янв 2025, 06:01
Код установки:
Код: Выделить всё
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
1736996477
Anonymous
Код установки: [code]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() [/code] Теперь в моей оболочке: [code]>>> i = iter( mc ) __iter__ >>> [ x for x in i ] [1, 2, 3] >>> list( mc ) __iter__ __len__ [1, 2, 3] [/code] Почему __len__() вызывается из list()? И где это задокументировано? Подробнее здесь: [url]https://stackoverflow.com/questions/79360261/why-does-list-call-len[/url]