私は、いくつかのクラスが「pickled」などの名前のクラス プロパティを持つ継承階層を持っています。A が B などの多くのクラスから派生し、存在する (または存在しない)A.pickled
場合でも、存在する場合は取得するか、存在しない場合は Noneを取得したいと思います。B.pickled
A
現在、私のソリューションは__mro__
. 可能であれば、よりクリーンなソリューションが欲しいです。
私は、いくつかのクラスが「pickled」などの名前のクラス プロパティを持つ継承階層を持っています。A が B などの多くのクラスから派生し、存在する (または存在しない)A.pickled
場合でも、存在する場合は取得するか、存在しない場合は Noneを取得したいと思います。B.pickled
A
現在、私のソリューションは__mro__
. 可能であれば、よりクリーンなソリューションが欲しいです。
を介した通常の検索をバイパスするには__mro__
、代わりにクラスの属性ディクショナリを直接調べます。vars()
そのために関数を使用できます:
return vars(cls).get('pickled', None)
__dict__
属性に直接アクセスすることもできます:
return cls.__dict__.get('pickled', None)
ただし、組み込み関数を使用する方が、二重下線付き属性辞書に直接アクセスするよりも優先されます。
object.__getattribute__
クラス属性を調べるために使用するのは間違った方法です。type.__getattribute__ と object.__getattribute__ の違いは何ですか? を参照してください。
type.__getattribute__
クラスの属性アクセスに使用されるものですが、それでもMROも検索します。
よくわかりませんが、おそらく
try:
return object.__getattribute__(cls, 'pickled')
except AttributeError:
return None