我正在使用Python进行OOP项目。我有一个类,其中方法定义了该类的新实例。但是,新实例将自动继承第一个实例的属性,尽管尚未对其进行编程。
class Vertex:
def __init__(self,name):
self.name = name
def __str__(self):
return self.name
# Questionnable line here https://stackoverflow.com/questions/727761/python-str-and-lists
def __repr__(self):
return self.__str__()
class Edge:
def __init__(self,start,end,weight):
self.start = start
self.end = end
self.weight = weight
def __str__(self):
return f"{self.start}{self.end}"
def __repr__(self):
return self.__str__()
class Graph:
vertices = []
edges = []
def addVertex(self, v):
self.vertices.append(v)
def vertexFromName(self,name):
return next((v for v in self.vertices if v.name == name), None)
def addEdge(self, start, end, weight):
self.edges.append(Edge(self.vertexFromName(start),
self.vertexFromName(end),weight))
def Kruskals(self):
self.tree = Graph()
# The self.tree.vertices is the same the the g.vertices
print(self.tree.vertices)
self.tree.vertices = [self.vertices]
v = [Vertex(x) for x in ["A","B","C","D","E","F"]]
g = Graph()
for _v in v:
g.addVertex(_v)
g.addEdge("A","F",6)
g.addEdge("A","B",5)
g.addEdge("B","C",1)
g.addEdge("C","D",2)
g.addEdge("D","E",3)
g.addEdge("B","E",4)
print(g.Kruskals())
我找不到有关此行为的任何参考,但可以使用Graph中的__init__
来解决此问题,
def __init__(self,e,v):
self.vertices = v
self.edges = e
...
def Kruskals(self):
self.tree = Graph([],[])
为什么会发生继承,还有更好的解决方案吗?