クラスを検査する方法が必要なので、ユーザー定義のクラス属性である属性を安全に識別できます。問題は、dir()、inspect.getmembers()、friendsなどの関数は、__class__
,__doc__
,__dict__
、__hash__
などの定義済みのクラス属性をすべて返します。これは当然理解できますが、名前を付けるメンバのリストを無視するだけでよいと主張することもできますが、残念ながらこれらの事前定義された属性は異なるバージョンのPythonで変更されるため、私のプロジェクトはPythonプロジェクト私はそれが好きではありません。Pythonクラス属性を検査する
例:それはインスタンス属性であるとして、私は唯一のユーザー定義クラスの属性を取得する安全な方法[「A」、「B」]ない「C」をしたい上記の例で
>>> class A:
... a=10
... b=20
... def __init__(self):
... self.c=30
>>> dir(A)
['__doc__', '__init__', '__module__', 'a', 'b']
>>> get_user_attributes(A)
['a','b']
。だから私の質問は...誰も上記の架空の関数で私を助けることができるget_user_attributes(cls)
?
P.S.私はASTレベルのクラスを解析することで問題を解決しようとしていましたが、これは非常に簡単です。しかし、私はすでに解析されたオブジェクトをASTノードツリーに変換する方法を見つけることができません。私は、クラスがバイトコードにコンパイルされると、すべてのAST情報は破棄されると思います。 「特別な属性」の両端にヤコブ
あなたはあなたがASTでそれをしようとしていると言います。つまり、スーパークラスではなくクラスですぐに定義された属性だけが必要なのでしょうか?私はあなたが「組み込みのもの」を望んでいないことを認識していますが、私はこの問題を混乱させています。 – aaronasterling