У объекта 'str' нет атрибута / ошибки при вызове словаря - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть класс с функцией, которая добавляет ребро к графику в соответствии с заданным вводом.Например: если введено значение add James Larry 1, будет добавлено ребро между James и Larry с весом (уровень близости) 1.График представляет собой словарь множеств, поэтому ключи - это узел, а значения (множества) - это ребра.

Итак, эта функция имеет в качестве параметров: источник, пункт назначения и вес.Класс представлен ниже:

class DiGraph(object):

     # Create an empty graph.
    def __init__(self):
        ## A dictionary that stores an entry of a node, as the key, and a set of outgoing edges 
        # (destination node, weight) from the node, as its value.
        self.graph = {}

        ## Total number of edges in the graph.
        self.__numEdges = 0

        ## The largest edge distance.
        # self.__infinity = sys.maxint
        self.__infinity = sys.maxsize

        ## Holds the path from a source node to a given node.
        self.__pathToNode = None

        ## Accumulated distance from source to a node.
        self.__dist = None

### (...)

   def addEdge(self, src, dst, c=1):
        if ( src == None or dst == None or c <= 0 or src == dst ):
            return False

       # the edge set of src
        eSet = self.graph.get(src)
        e = Edge(dst,c) # new edge
        if eSet == None: 
            # no edge starting at src, so create a new edge set
            eSet = set()
            self.__numEdges += 1
        else:
            ed = self.getEdge(src,dst)
            if ( ed != None ):
                ed.setCost(c)
                return True
            else:
                self.__numEdges += 1

        eSet.add(e) # a set does not have duplicates

        self.graph[src] = eSet
        if not self.hasVertex(dst):
            self.addVertex(dst)

        return True

Я пытаюсь реализовать этот код:

import DiGraph

#Create an empty graph
def main():
    aGraph = {}

    f = open("infile.txt")
    contents = f.read()
    lines = contents.splitlines()

    word = []

    for line in lines:
        word.append(line.split())

    for i in range(len(word)):
        if word[i][0] == 'add':
            aGraph = DiGraph.DiGraph.addEdge(word[i][1], word[i][2], int(word[i][3]))

    return aGraph

grafo = main()

И первая строка файла: add James Larry 1

Эта ошибка показывается мне, когда я пытаюсь запустить этот код:

Traceback (последний последний вызов):

File "C: /.../SocialGraph.py ", строка 24, в

grafo = main ()

Файл" C: /.../ SocialGraph.py ", строка 20, вmain

aGraph = DiGraph.DiGraph.addEdge (word [i] [1], word [i] [2], int (word [i] [3]))

Файл "C: ... \ DiGraph.py", строка 156, в addEdge

eSet = self.graph.get (src)

AttributeError: у объекта 'str' нет атрибута 'graph'

Что я могу сделать, чтобы исправить это?

Ответы [ 2 ]

1 голос
/ 27 сентября 2019
DiGraph.DiGraph.addEdge(word[i][1],

Вы называете это как статический метод.«слово [i] [1]» становится «я».

0 голосов
/ 27 сентября 2019

Вы реализуете addEdge как метод экземпляра, поэтому вам необходимо создать экземпляр для его использования.Вот так:

# create DiGraph instance
diGraph = DiGraph.DiGraph()

for i in range(len(word)):
        if word[i][0] == 'add':
            aGraph = diGraph.addEdge(word[i][1], word[i][2], int(word[i][3]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...