这是维基百科上提供的Ford-Fulkerson algorithm的实现。我理解算法很好,我的问题是:add_edge
和max_flow
方法访问redge
的{{1}}(反向边缘)为edge
,但是edge.redge
类没有名为Edge
的属性。尽管如此,代码运行良好。
redge
答案 0 :(得分:2)
代码设置 redge
属性:
edge = Edge(u,v,w)
redge = Edge(v,u,0)
edge.redge = redge
redge.redge = edge
从那里开始,edge
和redge
个对象做都有redge
个属性。
换句话说,在Python中,您可以自由地向代码中的任何位置添加属性,您不仅限于类定义或类本身的方法。 self
只是对实例的另一个引用,与edge
和redge
引用的方式相同。
答案 1 :(得分:2)
您可以使用以下命令为现有的用户定义对象分配新属性:
obj.prop = value
一旦分配,它们就存在。
你可以看到__init__
方法做同样的事情:它只是分配属性,然后它们就存在了。
答案 2 :(得分:2)
Python类不声明对象属性,它们存储在每个实例的字典中。 Edge
对象恰好以三个属性source
,sink
和capacity
开头。稍后它会获得一个新属性redge
。这是许多脚本语言的标准,包括Python。
话虽如此,请注意稍后添加属性的做法被一些人认为是混淆的。为了清楚起见,最好初始化类打算在构造函数中使用的所有属性。