1

私は、いくつかのクラスが「pickled」などの名前のクラス プロパティを持つ継承階層を持っています。A が B などの多くのクラスから派生し、存在する (または存在しない)A.pickled場合でも、存在する場合は取得するか、存在しない場合は Noneを取得したいと思います。B.pickled

A現在、私のソリューションは__mro__. 可能であれば、よりクリーンなソリューションが欲しいです。

4

2 に答える 2

2

を介した通常の検索をバイパスするには__mro__、代わりにクラスの属性ディクショナリを直接調べます。vars()そのために関数を使用できます:

return vars(cls).get('pickled', None)

__dict__属性に直接アクセスすることもできます:

return cls.__dict__.get('pickled', None)

ただし、組み込み関数を使用する方が、二重下線付き属性辞書に直接アクセスするよりも優先されます。

object.__getattribute__クラス属性を調べるために使用するのは間違った方法です。type.__getattribute__ と object.__getattribute__ の違いは何ですか? を参照してください。

type.__getattribute__クラスの属性アクセスに使用されるものですが、それでもMROも検索します。

于 2014-06-10T21:33:50.140 に答える
0

よくわかりませんが、おそらく

try:
    return object.__getattribute__(cls, 'pickled')
except AttributeError:
    return None
于 2014-06-10T21:05:46.693 に答える