'An EdgeView of the Graph as G.edges or G.edges().
The EdgeView provides set-like operations on the edge-tuples
as well as edge attribute lookup. When called, it also provides
an EdgeDataView object which allows control of access to edge
attributes (but does not provide set-like operations).
Hence, `G.edges[u, v][\'color\']` provides the value of the color
attribute for edge `(u, v)` while
`for (u, v, c) in G.edges(data=\'color\', default=\'red\'):`
iterates through all the edges yielding the color attribute.
Parameters
nbunch : iterable container, optional (default= all nodes)
A container of nodes.  The container will be iterated
through once.
data : string or bool, optional (default=False)
The edge attribute returned in 3-tuple (u, v, ddict[data]).
If True, return edge attribute dict in 3-tuple (u, v, ddict).
If False, return 2-tuple (u, v).
default : value, optional (default=None)
Value used for edges that dont have the requested attribute.
Only relevant if data is not True or False.
Returns
edges : EdgeView
A view of edge attributes, usually it iterates over (u, v)
or (u, v, d) tuples of edges, but can also be used for
attribute lookup as `edges[u, v][\'foo\']`.
Notes
Nodes in nbunch that are not in the graph will be (quietly) ignored.
For directed graphs this returns the out-edges.
Examples
>>> G = nx.path_graph(3)   # or MultiGraph, etc
>>> G.add_edge(2, 3, weight=5)
>>> [e for e in G.edges()]
[(0, 1), (1, 2), (2, 3)]
>>> G.edges(data=True)  # default data is {} (empty dict)
EdgeDataView([(0, 1, {}), (1, 2, {}), (2, 3, {\'weight\': 5})])
>>> G.edges(data=\'weight\', default=1)
EdgeDataView([(0, 1, 1), (1, 2, 1), (2, 3, 5)])
>>> G.edges([0, 3])
EdgeDataView([(0, 1), (3, 2)])
>>> G.edges(0)
EdgeDataView([(0, 1)])'

@property
def edges(self):

    self.__dict__['edges'] = edges = EdgeView(self)
    return edges
