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

问题描述 投票:0回答:1

我试图定义一个类,它的init函数需要一个默认参数。我定义了一个类,如下所示。

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.

我可以通过 "预先定义 "我所需要的类的部分来解决这个问题,比如这样。

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的方法。

python class parameters default init
1个回答
1
投票

你应该这样做。

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

这是你应该遵循的习惯用语,一开始就应该使用可变的默认参数。

然而,你需要默认参数有一个路径,否则它将不间断地递归。

© www.soinside.com 2019 - 2024. All rights reserved.