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