[文档]classEdge:""" An edge connecting two nodes. """def__init__(self,src_node,relation,dest_node,edge_id=None,properties=None):""" Create a new edge. """ifsrc_nodeisNoneordest_nodeisNone:# NOTE(bors-42): It makes sense to change AssertionError to# ValueError hereraiseAssertionError("Both src_node & dest_node must be provided")self.id=edge_idself.relation=relationor""self.properties=propertiesor{}self.src_node=src_nodeself.dest_node=dest_nodedefto_string(self):res=""ifself.properties:props=",".join(key+":"+str(quote_string(val))forkey,valinsorted(self.properties.items()))res+="{"+props+"}"returnresdef__str__(self):# Source node.ifisinstance(self.src_node,Node):res=str(self.src_node)else:res="()"# Edgeres+="-["ifself.relation:res+=":"+self.relationifself.properties:props=",".join(key+":"+str(quote_string(val))forkey,valinsorted(self.properties.items()))res+="{"+props+"}"res+="]->"# Dest node.ifisinstance(self.dest_node,Node):res+=str(self.dest_node)else:res+="()"returnresdef__eq__(self,rhs):# Type checkingifnotisinstance(rhs,Edge):returnFalse# Quick positive check, if both IDs are set.ifself.idisnotNoneandrhs.idisnotNoneandself.id==rhs.id:returnTrue# Source and destination nodes should match.ifself.src_node!=rhs.src_node:returnFalseifself.dest_node!=rhs.dest_node:returnFalse# Relation should match.ifself.relation!=rhs.relation:returnFalse# Quick check for number of properties.iflen(self.properties)!=len(rhs.properties):returnFalse# Compare properties.ifself.properties!=rhs.properties:returnFalsereturnTrue