1
私はオブジェクトでいっぱいのバイナリ検索ツリーを持っています。すべてのオブジェクトのプロパティをグローバル変数に追加するコールバック関数を使用して、ツリーを走査しています。私はこれが働いているが、私はグローバルを使用せずにこれを達成する方法を探したい。これは私が現在のトラバース機能ではなく別の実装を使用する必要が割り当てのための確かであるコールバック関数を使ってbstの値の合計を見つける(グローバルなし)
TOTAL_AGE = 0.0
class Node(object):
def __init__(self, data):
self.left = None
self.right = None
self.data = data
class Tree(object):
def __init__(self):
self.root = None
self.size = 0
def traverse(self, callback):
self._traverse(callback, self.root)
def _traverse(self, callback, node):
if node is None:
return
self._traverse(callback, node.left)
callback(node.data)
self._traverse(callback, node.right)
def add_ages(tree):
tree.traverse(callback)
def callback(student):
global TOTAL_AGE
TOTAL_AGE += student.age
def main():
tree = bst.Tree()
add_ages(tree)
print TOTAL_AGE
:
はここに関連するコードです。これは主に私の問題ですが、グローバルを使用せずにトラバースを変更する方法もありません()。
ご協力いただきありがとうございます。その後、
class Count(object):
def __init__(self):
self.total_age = 0
def callback(self, student):
self.total_age += student.age
そしてCount
をインスタンス化し、Tree
にそのcallback
メソッドを渡します:あなたは、インスタンスに状態を追跡できるように、コールバックとしてクラスインスタンスのメソッドを渡すことができ
私が望んでいたほど優雅ではありませんが、それにもかかわらず素晴らしい解決策です。ありがとう! – Grav