1

定義されたすべてのクラス属性を取得するために、私は一緒に行こうとしています

TheClass.__dict__

しかし、それは私に特別な属性も与えます. 自己定義された属性のみを取得する方法はありますか、それとも辞書を自分で「きれいにする」必要がありますか?

4

3 に答える 3

5

別の解決策:

class _BaseA(object):
    _intern = object.__dict__.keys()

class A(_BaseA):
    myattribute = 1

print filter(lambda x: x not in A._intern+['__module__'], A.__dict__.keys())

これはそれほど堅牢ではないと思いますし、もっと良い方法がまだあるかもしれません。

これは、他の回答のいくつかが指摘した基本的な問題のいくつかに対処します。

  • 'name convention'ベースフィルタリングは不要
  • たとえば、魔法のメソッドの独自の実装を提供すること__len__は問題ありません (A で定義)。
于 2009-12-17T18:58:48.370 に答える
2

単純なものはないと思いますが、なぜあるのでしょうか? マジック属性とユーザー定義属性の間に、言語による違いはありません。

「__」で始まるユーザー定義属性がある場合、MYYN のソリューションは機能しません。ただし、規則に基づく解決策を提案します。独自のクラスをイントロスペクトする場合は、独自の命名規則を定義し、それをフィルタリングできます。

必要性を説明していただければ、より良い解決策を見つけることができるかもしれません。

于 2009-12-17T17:14:57.107 に答える