クラス FileSystem:Component

## --------------------                # Composite::Component            
class FileNode(TreeViewItem):
    def __init__(self, name):
        self.Header = name
        self.size = 0

属性 self.Header は、親クラスから継承したもので、フォルダー/ファイルの名前を管理します。属性 self.size は、フォルダー/ファイルのサイズを管理します。ここでは、空のフォルダーを想定して、初期値 0 を設定しています。後に、実際のファイルサイズを設定します。

    def total(self):
        return reduce(
            lambda acc, e: acc + e.total(),
            self.Items,
            self.size)

属性 self.Items は、親クラスから継承したもので、部分木を構成する各要素 TreeViewItem を管理します。各項目(フォルダー/ファイル)e.total() の値を累計したものが、リターン値となります。

    def changed(self, client):
        client.update("%d bytes"%self.total())

各項目(フォルダー/ファイル)の値を累計した e.total() を使って、表示を更新します。