如何在Python中实现call-by-reference结构

时间:2015-12-28 17:46:09

标签: python class data-structures pass-by-reference

我正在编写决策树,我决定一个很好的实现是分支的类/对象结构(至少在C ++中)。为了简单起见,我要将其分解为必要的部分:

class DecisionTreeBranch:
    def __init__(self):
         parent      = None
         leftBranch  = None
         rightBranch = None

其中parent声明了超级决策的方式,leftBranchrightBranch定义了以下决策。

我正在尝试做什么

现在向下走不是问题,而是向上移动:假设这个树首先由左侧分支定义,所以如果我最终在最后的中。我向上迈出一步,走右边的树枝继续建造树木(如果我走到上面,左右定义了,我将向上迈出另一步,依此类推。)

目的是通过以下三个参数遍历树:parent(向上)和leftBranchrightBranch(向下)

问题

如果我采取例如C ++然后这不会是一个问题,我将使用 call-by-reference 定义父级。但是我最近开始用Python编写类,不幸的是我总是以按值调用表达式结束,确保上述分支的所有信息都丢失了。

基本上我正在寻找类似的东西:

[...]
# define way to former branch 
&curDecision.parent = &oldDecision
oldDecision = curDecision

# continue with the next/new decision on the current level
curDecision = DecisionTreeBranch()
[...]

任何人都可以帮助我吗?

亲切的问候

2 个答案:

答案 0 :(得分:2)

以下是通过引用调用的示例。您还可以看到,由于多个构造函数不能在python中使用,因此在 init 方法中使用了关键字参数:

class Maximum:
    def __init__(self,x = None,y = None):
        self.x = x
        self.y = y

    def max(self,Maximum):
        if Maximum.x > Maximum.y:
            print('{0} is maximum.'.format(Maximum.x))
        else:
            print('{0} is maximum.'.format(Maximum.y))

m1 = Maximum()
m2 = Maximum(3,8)
m1.max(m2)

答案 1 :(得分:1)

您始终可以使用父键,左键,右键传递字典。您将能够修改字典并通过键访问结构。