【发布时间】:2020-05-02 02:21:44
【问题描述】:
我正在尝试定义一个类,该类为其 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:名称“节点”未定义
我能够通过“预定义”我需要的类的部分来解决这个问题,如下所示:
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 的方式。
【问题讨论】:
-
为什么类把自己作为参数?
-
path应该是您要设置为默认值的Node对象吗? -
当然,但是虚拟节点是指向它自己,还是指向某个 other
Node对象?当尚不存在任何其他Nodes 时,第一个存在的Node指向什么? -
在阅读了 juanpa 的回答后,我明白了你的意思。我接受了他的“默认路径”解决方案。
-
另一种选择是使用哨兵对象作为该节点的默认值,即使只是
SENTINEL = object()
标签: python class parameters default init