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
这是您在开始使用可变默认参数时应该遵循的习语。
不过需要默认有路径,不然会不停地递归
我正在尝试定义一个 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
这是您在开始使用可变默认参数时应该遵循的习语。
不过需要默认有路径,不然会不停地递归