質問

取得すべて定義されたクラスの属性ようにしていく

TheClass.__dict__

ともに、この特殊属性です。がわかりやすく伝えるためだけの自己定義された属性またはい"清潔"のdictすか?

役に立ちましたか?

解決

別の解決:

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__ ない問題を定義する。

他のヒント

あなたは__dict__をきれいにすることはできません。

AttributeError: attribute '__dict__' of 'type' objects is not writable

あなたがに頼ることができる命名規則はをます:

class A(object):
    def __init__(self, arg):
        self.arg = arg

    class_attribute = "01"    

print [ a for a in A.__dict__.keys() 
        if not (a.startswith('__') and a.endswith('__')) ]

# => ['class_attribute']
あなたはもちろん上書きまたは特別/魔法を実装することができますので、

これは、信頼性がないかもしれません方法は、あなたのクラスで__item__または__len__ようします。

私はシンプルなものはないと思う、と理由があるでしょうか?魔法とユーザー定義属性の間には、言語に強制違いはありません。

あなたは「__」で始まるユーザ定義の属性を持っている場合は、

MYYNのソリューションは、動作しません。しかし、それは規則に基づくソリューションを提案します:。あなたがあなた自身のクラスをイントロスペクトしたい場合は、独自の命名規則を定義し、その上でフィルタリングすることができます。

あなたが必要性を説明する場合は、

おそらく、我々は、よりよい解決策を見つけることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top