Как сделать случайное число общим для экземпляров? - PullRequest
0 голосов
/ 21 июня 2020
import random

class Unique_Key(object):
def __init__(self):
    self.uni_k =random.randint(1, 1000000)
    


unique_key_obj1=Unique_Key()
print(f"First Record {unique_key_obj1.uni_k}")


unique_key_obj=Unique_Key()
print(f"Second Record {unique_key_obj.uni_k}")

Может ли кто-нибудь помочь мне с тем, как сделать значение объекта unique_key_obj1 таким же, как у объекта unique_key_obj? Спасибо!

Ответы [ 3 ]

6 голосов
/ 21 июня 2020

Вы должны установить эту переменную как переменную класса , а не переменную экземпляра . Примерно так:

import random

class Unique_Key(object):
    uni_k = random.randint(1, 1000000)
    
    def __init__(self):
        pass

unique_key_obj1 = Unique_Key()
print(f"First Record {unique_key_obj1.uni_k}")

unique_key_obj = Unique_Key()
print(f"Second Record {unique_key_obj.uni_k}")
First Record 208217
Second Record 208217

Когда вы устанавливаете self.some_variable на случайное значение, он создает переменную, которая указывается c только для этого экземпляра, а не совместно используется всеми экземплярами объект.

Переменные класса обычно определяются вне всех методов, размещаются прямо под заголовком класса и перед методом конструктора и другими методами.

0 голосов
/ 21 июня 2020

вы можете сделать это без установки seed. мы можем сделать это, сохранив предыдущее случайное состояние и назначив его следующему случайному вызову. это обеспечит генерацию тех же чисел.

Это было взято из python документов.

random.getstate()

Вернуть объект, фиксирующий текущее внутреннее состояние генератора. Этот объект можно передать в setstate () для восстановления состояния.

подробнее о модуле random см. python docs random

import random
prev_state = random.getstate()
num1 = random.randint(1, 1000000)

random.setstate(prev_state)
num2 = random.randint(1, 1000000)

print num1==num2

output

True

Теперь в вашем случае вы можете сохранить состояние в объекте класса, а не в экземпляре, см. Ниже. поэтому в каждом новом экземпляре класса вы получаете одно и то же случайное число.

class Unique_Key(object):
    intial_random_state = prev_state = random.getstate()

    def __init__(self):
        random.setstate(Unique_Key.intial_random_state)
        self.uni_k =random.randint(1, 1000000)

x = Unique_Key()
y = Unique_Key()

вывод

print x.uni_k == y.uni_k
True
0 голосов
/ 21 июня 2020

Использовать заполнение генератора случайных чисел.

import random

class Unique_Key(object):
def __init__(self):
    self.uni_k =random.randint(1, 1000000)
    
mySeed = random.randint(1, 1000000)
random.seed(mySeed)
unique_key_obj1=Unique_Key()
print(f"First Record {unique_key_obj1.uni_k}")


random.seed(mySeed)
unique_key_obj=Unique_Key()
print(f"Second Record {unique_key_obj.uni_k}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...