Вы можете создать подкласс random.Random, переписать метод seed () так же, как это делает python (v3.5 в этом примере), но сохраняя начальное значение в переменной до вызова super ():
import random
class Random(random.Random):
def seed(self, a=None, version=2):
from os import urandom as _urandom
from hashlib import sha512 as _sha512
if a is None:
try:
# Seed with enough bytes to span the 19937 bit
# state space for the Mersenne Twister
a = int.from_bytes(_urandom(2500), 'big')
except NotImplementedError:
import time
a = int(time.time() * 256) # use fractional seconds
if version == 2:
if isinstance(a, (str, bytes, bytearray)):
if isinstance(a, str):
a = a.encode()
a += _sha512(a).digest()
a = int.from_bytes(a, 'big')
self._current_seed = a
super().seed(a)
def get_seed(self):
return self._current_seed
Если вы протестируете его, первое случайное значение, сгенерированное с помощью нового начального числа, и второе значение, сгенерированное с использованием того же начального числа (с помощью созданного нами метода get_seed ()), будут равны:сохраните / скопируйте огромное начальное значение и попробуйте использовать его в другом сеансе, сгенерированное значение будет точно таким же.