all attributes/methods/fields/etcを取得する方法はありますか。 Pythonのオブジェクトの?
vars()
は近いですが、オブジェクトが__dict__
を持っていないとうまくいきません。これは必ずしも真実ではありません(例えばlist
name__、dict
name__では真実ではありません)。など)。
組み込み関数 dir()
を使用してください。
おそらく欲しいのは dir()
です。
キャッチはクラスが特別な__dir__
メソッドをオーバーライドすることができるということです、それはdir()
がクラスが望むものは何でも返すようにします(彼らは正確なリストを返すことが奨励されますが、これは強制されません)。さらに、オブジェクトによっては、__getattr__
をオーバーライドすることによって動的属性を実装することも、RPCプロキシオブジェクトにすることも、C拡張クラスのインスタンスにすることもできます。あなたのオブジェクトがこれらの例の1つである場合、それらは__dict__
または を持っていないかもしれません__dir__
を通して属性の包括的なリストを提供することができません。実際に知っている what あなたがアクセスしようとするまでそれは持っています。
手短に言えば、dir()
が十分でない場合、オブジェクトに対して__dict__
をトラバースし、次に__dict__
内のすべてのクラスに対してobj.__class__.__mro__
をトラバースする関数を書くことができます。ただしこれは通常のPythonオブジェクトに対してのみ機能します。長い目で見れば、アヒルタイピング+仮定を使わなければならないかもしれません - それがアヒルのように見えるならば、あなたの指を交差させてください、そしてそれが.feathers
を持っていることを望みます。
私は__dict__
を使います
例 :
class MyObj(object):
def __init__(self):
self.name = 'Chuck Norris'
self.phone = '+6661'
obj = MyObj()
print(obj.__dict__)
# Output:
# {'phone': '+6661', 'name': 'Chuck Norris'}
属性を取得するにはdir(your_object)
を、値を取得するにはgetattr(your_object, your_object_attr)
を使用できます。
使用法 :
for att in dir(your_object):
print (att, getattr(your_object,att))