Can __iter__ be used as a classmethod?

Lulu of the Lotus-Eaters mertz at gnosis.cx
Mon Mar 3 18:17:43 EST 2003


"Bjorn Pettersen" <BPettersen at NAREX.com> wrote previously:
|I would like to be able to traverse the content of a class (not an
|instance) using a regular for loop: "for item in MyClass:...".

If you want to add methods to a *class*, you create the class using a
custom metaclass:

    % cat classiter.py
    from __future__ import generators
    class ClassIter(object):
        vals = ['a', 'b', 'c']
        class __metaclass__(type):
            def __iter__(cls):
                print 'iter'
                return cls.items()
        def items(cls):
            print 'items'
            for item in cls.vals:
                yield item
        items = classmethod(items)

    for x in ClassIter:
        print x

    % python classiter.py
    iter
    items
    a
    b
    c


Yours, Lulu...

--
mertz@  | The specter of free information is haunting the `Net!  All the
gnosis  | powers of IP- and crypto-tyranny have entered into an unholy
.cx     | alliance...ideas have nothing to lose but their chains.  Unite
        | against "intellectual property" and anti-privacy regimes!
-------------------------------------------------------------------------






More information about the Python-list mailing list