0

その中のすべての要素を印刷するために使用したいコンテナクラスがあります。

それらをファイルまたはコンソールに出力したいと思います。

エレメント ( Patch) とコンテナ クラスを以下のようにレイアウトしました__repr__(self)
の目的を理解できていないので__repr__()、ここでの使用は問題ないかどうか疑問に思っています。

class Patch:
    def __init__(self, folder_name, file_name):
        self.folder_name = folder_name
        self.file_name = file_name
        self.full_path = os.path.join(self.folder_name, self.file_name)
        self.file_hash = md5_for_file(open(self.full_path, 'r'))
        self.file_size = os.path.getsize(self.full_path)

    def __repr__(self):
        return "%s %s %s" % (self.file_name, self.file_hash, self.file_size)

class PatchContainer:
    def __init__(self):
        self.patch_folder_dict = collections.OrderedDict()
        self.patch_file_set = set()
    def addPatch(self, patch):
        if patch.file_name in self.patch_file_set:
            print '*** Delete the file ', patch.full_path, ' ***'
            return
        self.patch_file_set.add(patch.file_name)
        if not patch.folder_name in self.patch_folder_dict:
            self.patch_folder_dict[patch.folder_name] = [patch]
        else:
            self.patch_folder_dict[patch.folder_name].append(patch)

    def prettyPrint(self, writeable_object=PATCH_META_FILE):
        sys.stdout = writeable_object
        for patch_folder in self.patch_folder_dict.keys():
            print patch_folder
            patch_list = self.patch_folder_dict[patch_folder]
            for patch in patch_list:
                print patch
        sys.stdout = sys.__stdout__

意図したとおりに動作しますが、スタイル/使用法が問題ないかどうかコメントしてください.

4

2 に答える 2

4

これはおそらくあなたが望むように見えます__str__。それらは似てい__str__ますが、人間が消費することを意図したものを返します。__repr__は、Python での使用を意図したものを返す必要があります。これは、等しいオブジェクトとして評価される Python 式か、デフォルトのような山かっこで囲まれたものである必要があります<classname object at id>。最終的に を呼び出すbuiltinのドキュメントを参照してください。repr(object)object.__repr__()

多くの型について、この関数は、eval() に渡されたときに同じ値を持つオブジェクトを生成する文字列を返そうとします。それ以外の場合、表現は、オブジェクトの型の名前を一緒に含む山括弧で囲まれた文字列です。追加情報あり

于 2012-06-11T03:15:09.733 に答える
2

これは、人間が判読できるオブジェクトの表現です。

于 2012-06-11T03:15:28.247 に答える