The numpy library provides a lot of different distributions, and the random library provides a few too
This sample implementation of random suggests that exactly what you're asking cannot be done. Methods like choice call random.random(), by
def choice(self, seq): """Choose a random element from a non-empty sequence.""" return seq[int(self.random() * len(seq))]
and random is only dependent on the seed. Manipulating the seed to change the distribution type would be quite convoluted, and surely violate the the randomness guarantees.
If you really wanted a module-wide change in default behaviour, you could modify __builtin__ or hack into the module attributes, but it seems much more direct to
from numpy.random import beta from random import gauss def choice(seq): return seq[int(beta() * len(seq))]
or whenever needed, or put in a central location. I would also point you to a note in the random modules documentation
Class Random can also be subclassed if you want to use a different basic generator of your own devising: in that case, override the following methods: random(), seed(), getstate(), and setstate(). Optionally, implement a getrandbits() method so that randrange() can cover arbitrarily large ranges.
Introducing a BetaRandom class, e.g., would be trivial this way a much more maintainable, imo, than changing the reliable behaviour of the built in class (which may be possible through enough introspection and hacking)
I would also note that numpy's setstate is not what you want
* stole a link from comment by TessellatingHeckler