単純な例親はバージョン属性を持つクラスです。私はこのクラスを継承したいが、すべての継承クラス間でバージョン属性を共有しないようにする。異なるクラスからの上書きを避けるために、クラスごとにクラス属性を別々にする方法はありますか?
class Parent(object):
versions = []
@classmethod
def add_version(cls, version):
cls.versions.append(version)
class P1(Parent):
pass
class P2(Parent):
pass
class Thing(object):
pass
P1.add_version(Thing)
# should be Thing
print(P1.versions)
# should be empty [] by my design but it works other way in Python
# how to achieve to different versions fields without coding it in child classes?
print(P2.versions)
このような結果は、クラス間で共有されているため、どのように回避するのですか?
[<class '__main__.Thing'>]
[<class '__main__.Thing'>]
良いアイデアかもしれませんが、もっと簡単な解決策がありますが、あなたは正しいメタクラスです。 – Chameleon
"はあなたよりもはるかに面倒です" =>うまく、文脈によって異なります。これが同じモジュール内にある2つの子クラスのためのものであり、他の誰かがこれらのクラスを拡張することは期待できません。実際には 'versions'属性を手動で追加するだけです。ライブラリやフレームワークのコードで、 'Parent'がライブラリやフレームワークのユーザによって拡張されていると仮定した場合、5行のメタクラスは本当に"面倒 "の価値があります;) –