我正在尝试将一个比较冗长的“数据”类转换为一个命名元组。我的类目前看起来像这样:
class Node(object):
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
转换为 namedtuple
后,它的样子如下:
from collections import namedtuple
Node = namedtuple('Node', 'val left right')
但是这里存在一个问题。我的原始类允许我仅传递一个值,并通过使用命名/关键字参数的默认值来处理默认值。就像这样:
class BinaryTree(object):
def __init__(self, val):
self.root = Node(val)
但是对于我重构后的命名元组,这种方法不起作用,因为它期望我传递所有字段。当然,我可以将 Node(val)
的所有出现替换为 Node(val, None, None)
,但我并不喜欢这种方式。
那么,是否存在一种好的技巧,可以让我成功地重写代码,而不会增加太多的代码复杂性(元编程),或者我只能咽下这颗苦果,继续使用“搜索和替换”方法?:)
.debug_print()
方法来遍历树并打印它吗? - stevehaBinaryTree
类而言的。而Node
和其他的数据容器并不需要这样特殊的方法,尤其是因为命名元组已经有了相当不错的__str__
和__repr__
表示方式。 :) - sasuke