I was reading about generator and iterators and the role of __next__() . 
\'__next__\' in dir(mygen). is true
\'__next__\' in         
        
__next__ and __iter__ are method wrappers for when you do next(some_gen) or iter(some_sequence). next(some_gen) is the same as some_gen.__next__()
So if I do mygen = iter(mylist) then mygen is mylist implemented as a generator object and has a __next__ method descriptor. Lists themselves do not have this method because they are not generators.
Generators are iterators. Check out difference between generators and iterators