使用随机初始化变量(python)创建类实例的副本

2024-09-29 19:34:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要用一个随机生成的数字初始化一个类的实例。然后我需要在几个不同的试验中使用这个实例。但是,我在制作这个实例的精确副本时遇到了麻烦-随机生成的数字将不会保持不变。每个副本都生成一个新的随机数。在

temp = proc(random.randint(min, max))
tempCpy = copy.copy(temp) #changes on temp interfere with tempCpy
tempCpy = copy.deepcopy(temp)  #doesn't start with same random number

Tags: 实例onwith副本数字randomprocmin
3条回答

也许,你可以从你的对象中分离出随机数?在

init_numb = random.randint(min, max)
temp = proc(init_numb)
tempCpy = copy.copy(temp) #changes on temp interfere with tempCpy
tempCpy = copy.deepcopy(temp)

你需要初始化随机.seed()带一个您将重复使用的参数。它将保证你生成“相同的随机数”。(例如。随机.seed(0)在其他代码之前)

你有这样的课程,我想:

class proc(object):

    def __init__(self, value):
        self.value = value

当你初始化你的第一个实例时,你写下:

^{pr2}$

这将随机数存储在temp.value。在

要制作副本,只需将temp.value传递给proc构造函数:

dupe = proc(temp.value)

您也可以编写类来自动执行此操作,这样当您将proc的实例传递给proc构造函数时,它会生成一个副本(与其他类型一样,例如list和{},它们的构造函数可以用来制作它们的副本)。这样做的好处是保留了类中复制需要做什么的所有知识,而不是调用方需要知道数据存储在哪里。在

class proc(object):
    def __init__(self, value):
        if isinstance(value, proc):
            value = value.value
        self.value = value

现在,你可以写下:

dupe = proc(temp)

或者,您可以向proc添加一个方法来制作副本:

class proc(object):

    def __init__(self, value):
        self.value = value

    def copy(self):
        return type(self)(self.value)

现在你的副本是:

dupe = temp.copy()

最后,如果您将copy方法命名为__copy__(或同时使用这两个名称),它将神奇地与copy.copy一起工作!

class proc(object):

    def __init__(self, value):
        self.value = value

    def copy(self):
        return type(self)(self.value)

    __copy__ = copy   # alias for use by 'copy' module

temp = proc(random.randint(min, max))
dupe = copy.copy(temp)

相关问题 更多 >

    热门问题