python - 具有内部节点值的树结构,__init__ 方法的参数
问题描述
下面的类表示具有内部节点值的树结构。斐波那契递归函数用于制作fib_tree
. 我还没有遇到下面的类的回电fib_tree
。这个符号Tree (left.entry + right.entry, left, right)
让我感到困惑。在 OOP 中,我熟悉obj_inst.att
, obj_inst.method()
, properties
,self
等__init__
。
这里left.entry + right.entry
-left,right和entry是对象实例本身的属性,那是什么attribute.attribute
意思呢?究竟是什么被传递到这里__init__
?这是一种流行的技术吗?它有我可以研究的名称吗?
class Tree (object):
def __init__(self, entry , left = None, right = None):
self.entry = entry
self.right = right
self.left = left
def __repr__(self):
args = repr(self.entry)
if self.left or self.right:
args += ' , {0}, {1}'.format (repr(self.left), repr(self.right))
return 'Tree ({0})'. format (args)
def fib_tree (n):
if n == 1:
return Tree (0)
if n == 2:
return Tree (1)
left = fib_tree (n-2)
right = fib_tree (n-1)
return Tree (left.entry + right.entry, left, right)
fib_tree (4)
#Tree (2 , Tree (1), Tree (1 , Tree (0), Tree (1)))
解决方案
Tree (left.entry + right.entry, left, right)
这表示“创建一个 Tree 类的新实例,带有一个数字和两个 Tree 实例。” (在这种情况下......类型检查在 Python 中不是很重要)。
请注意,left 和 right 不是属性,它们是 Tree 的实例,在 fib_tree() 的 return 上方的两行中创建。
推荐阅读
- sql - 基于 SELECT 从其他表 MSSQL 添加新列
- java - 为什么 InputStreamReader .read() 等到永远
- typescript - 在 vue 2.6.14 和打字稿上 Hmr 热重载失败
- ruby-on-rails - 如何重新排列参数以获得所需的结构?
- regex - 列出(查找)名称中具有重复模式的文件
- sql - 在日志中发现错误 - ORA-00905: Missing Keyword i
- flutter - 如何在颤振中为咀嚼播放器添加视频投射?
- c# - 检测嵌套类型的泛型
- python - 列表理解以收集具有最内层键的嵌套字典项目
- ruby-on-rails - 在现有活动记录对象上重新运行 after_create 回调