Python class 的 init 函数将自己的实例 class 作为默认参数

Python class's init function takes instance of own class as default parameter

我正在尝试定义一个 class,它为其 init 函数接受一个默认参数。我定义了一个 class 如下:

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: name 'Node' is not defined

我能够通过 "pre-defining" 我需要的 class 部分解决这个问题,像这样:

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

但我无法摆脱一种更好、更 pythonic 方式的感觉。

你应该这样做:

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

这是您在开始使用可变默认参数时应该遵循的习语。

不过需要默认有路径,不然会不停地递归