Jestem nowy w programowaniu i próbuję obliczyć głębokość drzewa Pythona. Uważam, że mój błąd jest taki, ponieważ głębokość jest metodą klasy węzła, a nie zwykłą funkcją. Próbuję się nauczyć oop i miałem nadzieję, że użyję metody. To może być nowy błąd pszczoła ... Oto mój kod:głębokość pytona drzewa
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 za poprawną intuicję Twojego problemu. –
Dla przyszłego odniesienia uważam, że "nowa pszczoła" jest pisana "newbie", jeśli się nie mylę. –
Intuicja jest częściowo poprawna (wywołanie 'depth()' jako metody rozwiązuje problem), ale nieco niekompletne. Przyczyną, która wyjaśnia, dlaczego nie można uzyskać dostępu do metody z samej siebie, ale można za pomocą zwykłej funkcji jest nieco zaangażowany szczegół, jak zakres i definicja klasy działa w Pythonie. Kiedy wywołujesz zwykłą funkcję na poziomie modułu, jej zasięgiem "globalnym" będzie moduł, w którym został zdefiniowany, który zawiera tę funkcję. Jednak zakres, w którym metody są zdefiniowane, można uznać za odrzucony po utworzeniu obiektu typu. – millimoose