对象自动继承

时间:2020-04-10 10:17:52

标签: python oop

我正在使用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([],[])

为什么会发生继承,还有更好的解决方案吗?

0 个答案:

没有答案
相关问题