最初に一般的な説明、次に私が実際に取り組んでいること:あなたがリンゴのグループを持っているとしましょう。type = "Green Apple"
andなどの一部のプロパティは共有できますが、 andや。picked_date = "Aug 12 2012"
などの他のデータはアップル間で異なる可能性があります。アップル間で編集可能な値を共有するだけでなく、グループ内のアップルごとに個別の属性を持たせるための最もPython的な方法は何ですか?、、から来て、私の最初の本能は一般的な構造体であり、各リンゴのインスタンスにグループ情報が含まれているのはばかげているように見えるので、一般的な構造体へのポインタを持つ各リンゴの構造体です。すべてのリンゴを編集しますがis_bruised
weight
size
type
C
C++
type = "Red Apple"
type
プログラミング力の無駄である値。
実際のコードでは、現在の作業プロジェクトで、会社にとって意味のある方法で出力を解析するのに役立つgitスクリプトに取り組んでいます。私は(a)リスト、(b)タプル、(c)辞書、および(d)Pythonのクラスを読んでいますが、このデータを表現するための最良の方法を見つけようとして本当に行き詰まっています。
具体的には、私はgit commitを処理しています。関係する値には、「コミットの作成者を出力しますか?」などのすべてのコミット間で共有される一般的なプロパティと、「 commitxには作成者y"があります。私の現在の解決策はエレガントではありません:
class Commit(object):
def __init__(self, author="", committer="", date="", issue="",
instruction="", message="", review="", sha="", short=""):
self.author = author
self.committer = committer
self.date = date
self.instruction = instruction
self.issue = issue
self.message = message
self.review = review
self.sha = sha
self.short = short
このクラスには、特定のコミットに関連付けられたデータが含まれています。これで、すべてのコミットのデータが次のように保存されます。
Attribute = namedtuple('Attribute', ['display', 'critical'])
commit_attr = {'author': Attribute(display = True, critical = True),
'committer': Attribute(display = True, critical = True),
'date': Attribute(display = False, critical = False),
'instruction': Attribute(display = True, critical = False),
'issue': Attribute(display = True, critical = False),
'message': Attribute(display = True, critical = False),
'review': Attribute(display = True, critical = False),
'sha': Attribute(display = True, critical = True),
'short': Attribute(display = True, critical = True)}
これは、フィールドに名前付きタプルが含まれる辞書です。「クリティカル」は、そのフィールドをコミットで表示する必要があるかどうかを示します。表示は、フィールドを印刷するかどうかを決定するために使用されます。
これが私の問題です:Pythonの関連データをコヒーレントメソッドにグループ化する必要があることは知っていますが、ここでそれを行う方法がわかりません:クラスなどの「ポインター」を持つことができますが、これはそうではありませself.attr = commit_attr
ん非常にクリーンで、そのオブジェクトがそのアドレスを保持している、つまり可変であることに依存します。そうでない場合、一般属性の値を変更すると、クラスCommit()
に関連付けられなくなります。Commit()