Python функция init класса принимает экземпляр собственного класса в качестве параметра по умолчанию - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь определить класс, который принимает параметр по умолчанию для своей функции инициализации. Я определил класс следующим образом:

class Node:
    def __init__(self,name,visited=False,distance=math.inf,path=Node('-')):
        self.name = name
        self.visited = visited
        self.distance = distance
        self.path = path

и получаю следующую ошибку:

NameError: имя 'Node' не определено

Мне удалось обойти эту проблему, «предварительно определив» нужные мне части класса, например:

class Node:
    def __init__(self,name):
        self.name = name

class Node:
    def __init__(self,name,visited=False,distance=math.inf,path=Node('-')):
        self.name = name
        self.visited = visited
        self.distance = distance
        self.path = path

, но я не могу избавиться от ощущения, что лучше, больше pythoni c way.

1 Ответ

1 голос
/ 02 мая 2020

Вы должны сделать это:

class Node:
    def __init__(self,name,visited=False,distance=math.inf,path=None):
        self.name = name
        self.visited = visited
        self.distance = distance
        if path is None:
            self.path = Node('-', path="default-path")
        else:
            self.path = path

Это идиома, которой вы должны следовать с изменяемыми аргументами по умолчанию, чтобы начать с.

Однако вам нужен путь по умолчанию, или это будет повторяться без остановки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...