Python: почему я получаю сообщение об ошибке «неожиданный аргумент ключевого слова»?

Пытаюсь построить график. Для инициализации я хотел либо начать с набора узлов и ребер, либо нет. Поэтому я дал им значение по умолчанию None. Или я так подумал:

def Graph():
    def __init__(self, nodes=None, edges=None, msg = "test"):
        """
        assumes that the node and edge lists are the respective objects
        """
        if nodes == None:
            self.nodes = []
        else:
            self.nodes = nodes
            
        if edges == None:
            self.edges = []
        else:
            self.edges = edges
        
        self.node_names = []
        for node in nodes:
            self.node_names.append(node.get_name())
            
        self.msg = msg

(часть msg предназначена для тестирования кода на самом простом примере)

Что я получил:

g = Graph(msg = "33")
Traceback (most recent call last):

  File "<ipython-input-29-cc459c9baef3>", line 1, in <module>
    g = Graph(msg = "33")

TypeError: Graph() got an unexpected keyword argument 'msg'

Кто-нибудь может мне помочь? Это, наверное, до смешного простая вещь, но я просто не вижу этого, и я тут немного схожу с ума...

вы, вероятно, хотите for node in self.nodes, а не for node in nodes. Это наблюдение, а не ответ на ваш вопрос.

RufusVS 11.12.2020 19:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
1
2 053
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы определили Graph не как класс, а как обычную функцию.

Замените def Graph(): на class Graph:.

Ладно, из всех ошибок, которые я когда-либо совершал, это была, наверное, самая глупая... Спасибо!

tom 11.12.2020 23:29

Объявите «График» как класс.

class Graph():
    def __init__(self, nodes=None, edges=None, msg = "test"):
        """
        assumes that the node and edge lists are the respective objects
        """
        ..

Другие вопросы по теме