Я новичок в программировании и пытаюсь вычислить глубину дерева python. Я считаю, что моя ошибка заключается в том, что глубина - это метод класса Node, а не регулярная функция. Я пытаюсь изучить oop и надеялся использовать метод. Это может быть новая ошибка пчелиный ... Вот мой код:глубина дерева python
class Node:
def __init__(self, item, left=None, right=None):
"""(Node, object, Node, Node) -> NoneType
Initialize this node to store item and have children left and right.
"""
self.item = item
self.left = left
self.right = right
def depth(self):
if self.left == None and self.right == None:
return 1
return max(depth(self.left), depth(self.right)) + 1
i receive this error:
>>>b = Node(100)
>>>b.depth()
1
>>>a = Node(1, Node(2), Node(3))
>>>a.depth()
Traceback (most recent call last):
File "C:\Program Files\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 1, in <module>
# Used internally for debug sandbox under external interpreter
File "C:\Program Files\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 15, in depth
builtins.NameError: global name 'depth' is not defined
+1 для правильной интуиции вашей проблемы. –
В будущем, я считаю, что 'новая пчела' написана' newbie', если я не ошибаюсь. –
Интуиция частично корректна (вызов 'depth()' как метод решает проблему), но несколько неполный. Основная причина, объясняющая, почему вы не можете получить доступ к методу изнутри, но вы можете с помощью регулярной функции, - это несколько подробная информация о том, как сфера и определение класса работают в Python. Когда вы вызываете регулярную функцию уровня модуля, это «глобальная» область видимости будет определяемым модулем, который содержит эту функцию. Однако область определения методов может считаться отброшенной после создания объекта типа. – millimoose