The below code attempts to illustrate what I want. I basically want two instances of “random” that operate independently of each other. I want to seed “random” within one class without affecting “random” in another class. How can I do that?
class RandomSeeded:
def __init__(self, seed):
import random as r1
self.random = r1
self.random.seed(seed)
def get(self):
print self.random.choice([4,5,6,7,8,9,2,3,4,5,6,7,])
class Random:
def __init__(self):
import random as r2
self.random = r2
self.random.seed()
def get(self):
print self.random.choice([4,5,6,7,8,9,2,3,4,5,6,7,])
if __name__ == '__main__':
t = RandomSeeded('asdf')
t.get() # random is seeded within t
s = Random()
s.get()
t.get() # random should still be seeded within t, but is no longer
Class
random.Randomexists specifically to allow the behavior you want — modules are intrinsically singletons, but classes are meant to be multiply instantiated, so both kinds of needs are covered.Should you ever need an independent copy of a module (which you definitely don’t in the case of
random!), try usingcopy.deepcopyon it — in many cases it will work. However, the need is very rare, because modules don’t normally keep global mutable states except by keeping one privileged instance of a class they also offer for “outside consumption” (other examples besidedrandomincludefileinput).