FAQ
So I have a generator, either as a free function or in a class and I
want to generate objects that are initialized from the generated things.

def generator():
for whatever:
yield something
class Object():
def __init__(self):
self.data = # the next thing from generator

I have not been able to implement this elegantly. For external reasons
the following syntax is unacceptable:

for g in generator():
ob = Object(g)

I really want to be able to write "Object()" in any location and get a
properly initialized object.

Hints appreciated.

Victor.
--
Victor Eijkhout -- eijkhout at tacc utexas edu

Search Discussions

  • Emile van Sebille at Dec 22, 2010 at 11:46 pm
    On 12/22/2010 3:15 PM Victor Eijkhout said...
    So I have a generator, either as a free function or in a class and I
    want to generate objects that are initialized from the generated things.

    def generator():
    for whatever:
    yield something
    class Object():
    def __init__(self):
    How about change to

    def __init__(self, data=generator()):
    self.data = # the next thing from generator
    then...

    self.data = data.next()# the next thing from generator

    HTH,

    Emile


    I have not been able to implement this elegantly. For external reasons
    the following syntax is unacceptable:

    for g in generator():
    ob = Object(g)

    I really want to be able to write "Object()" in any location and get a
    properly initialized object.

    Hints appreciated.

    Victor.
  • Dan Stromberg at Dec 22, 2010 at 11:49 pm

    On Wed, Dec 22, 2010 at 3:15 PM, Victor Eijkhout wrote:
    So I have a generator, either as a free function or in a class and I
    want to generate objects that are initialized from the generated things.

    def generator():
    ? ? ? ?for whatever:
    ? ? ? ? ? ? ? ?yield something
    class Object():
    ? ? ? ?def __init__(self):
    ? ? ? ? ? ? ? ?self.data = # the next thing from generator

    I have not been able to implement this elegantly. For external reasons
    the following syntax is unacceptable:

    for g in generator():
    ? ? ? ?ob = Object(g)

    I really want to be able to write "Object()" in any location and get a
    properly initialized object.

    Hints appreciated.

    Victor.
    --
    Victor Eijkhout -- eijkhout at tacc utexas edu
    --
    http://mail.python.org/mailman/listinfo/python-list
    You likely want a class variable:

    #!/usr/bin/python

    def generator():
    i = 0
    while True:
    yield i
    i += 1

    class Object:
    gen = generator()

    def __init__(self):
    self.data = Object.gen.next()

    def __str__(self):
    return str(self.data)

    o1 = Object()
    o2 = Object()
    o3 = Object()

    print o1
    print o2
    print o3
  • Victor Eijkhout at Dec 23, 2010 at 2:45 am

    Dan Stromberg wrote:

    You likely want a class variable:
    Sounds like an elegant solution. Thanks!

    Victor.
    --
    Victor Eijkhout -- eijkhout at tacc utexas edu
  • Nobody at Dec 23, 2010 at 8:32 pm

    On Wed, 22 Dec 2010 15:49:31 -0800, Dan Stromberg wrote:

    def generator():
    i = 0
    while True:
    yield i
    i += 1
    Shorter version:

    from itertools import count as generator

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppython-list @
categoriespython
postedDec 22, '10 at 11:15p
activeDec 23, '10 at 8:32p
posts5
users4
websitepython.org

People

Translate

site design / logo © 2022 Grokbase