Vincent Davis wrote:
I have a program that generates many instances of a class with an attribute
self.x = random.gauss(10, 2). So each instance has a different value for
self.x. This is what I want. Now I want to make a class that starts my
program and sets the attributes.
class people:
    def __init__(self, size)
        self.size = size

class makepeople:
    def __init__(self, randomsize)
        self.rsize = randomsize
        self.allpeople = []
    def makethem():
        for x in range(1,100):
            p+str(x) = people(self.rsize)
            allpeople.append(p+str(x))

so what I would like to have work is set the attribute of makepeople so that
when it is used to make instances of people each will have a different size.

listofp = makepeople(random.guass(100, 2))
listofp.makethem()

I would then what listofp.allpeople to be a list of people with different
sizes. The above code does not work, I don't think it does anyway.

I hope this makes sense, I am sure there is a term for what I am trying to
do but I don't know it.

Thanks
Vincent Davis

You're trying to do several things here, and I'm unclear on many of the details. So here's a new spec, and the implementation for it.

We want a factory class, which can be given a particular distribution function and parameters, and using those parameters generate a list of Person objects, whose heights are distributed according to that random function. There might be duplicates in that list, but they'd be random coincidence, and the list as a whole would be as random as the function specified by the caller.

I also took a few liberties on the names of things, trying to use Python conventions for naming, and things like using a singular word for a classname of a single item. And I removed the allpeople attribute, as the class only makes sense to me if you can use its instance multiple times, to generate more items with the same given distribution.


CODE----
import random, functools

class Person:
   def __init__(self, size):
       self.size = size
   def __str__(self):
       return "Person of size %s" % self.size

class MakePeople:
   def __init__(self, random_func):
       self.random_func = random_func

   def make_them(self, count):
       return [Person(self.random_func()) for i in xrange(count)]


people_maker = MakePeople(functools.partial(random.gauss, 100, 2))
persons = people_maker.make_them(100)
for person in persons:
   print person

/CODE---

DaveA
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to