Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用现有对象和python中的新参数值初始化新python对象?_Python_Oop - Fatal编程技术网

如何使用现有对象和python中的新参数值初始化新python对象?

如何使用现有对象和python中的新参数值初始化新python对象?,python,oop,Python,Oop,以下是我的代码片段:- class Board: def __init__(self,level): self.lvl=level self.val=0 class State: def __init__(self): self.p=Board(0) self.p.val=100 self.u=self.p 我希望u的级别为1,val为100。我知道我可以单独修改,但我想在初始化u和级别值1时传递p

以下是我的代码片段:-

class Board:
    def __init__(self,level):
        self.lvl=level
        self.val=0
class State:
    def __init__(self):
        self.p=Board(0)
        self.p.val=100
        self.u=self.p
我希望u的级别为1,val为100。我知道我可以单独修改,但我想在初始化u和级别值1时传递p的引用。
像self.u=Board(1)这样的东西解决不了我的目的。

经过多次尝试,我认为可以使用复制构造函数。但我认为,如果引用传递或任何简单的方法存在,它将是有效的

class Board:
    def __init__(self,level,orig=None):
        if orig is None:
            self.val=0
        else:
            self.val=orig.val
        self.lvl=level
class State:
    def __init__(self):
        self.p=Board(0)
        self.p.val=100
        self.u=Board(1,self.p)

使
Board
接受
val
作为第二个参数
self.u=Board(1100)
…?!没错,但我想把p的引用传递给u,这样u.val=p.val。那么…
self.p=self.u=Board(01100)
…?!但是为什么一开始就有两个对同一个对象的引用呢?不清楚您是否希望
u.val
p.val
具有相同的初始值,但独立地改变,或者如果您要求的是每当
p.val
改变
u.val
相应地改变…
self.p=self.u=Board(0,100)
如果我使用的是带有递归的列表或任何其他结构,这实际上会出错。简单地说,u的状态必须与p的状态相同,且级别为+1。