オブジェクトのインスタンス変数のリストにアクセスするには、myObject.__dict__.keys()
を呼び出します。この属性を使用して、オブジェクトのすべてのインスタンス変数を出力します。 __dict__
は「秘密」属性なので、私はこれをすることを躊躇しています。私は何を意味するのか分かりません。this footnote。__dictでPythonインスタンス変数にアクセス__-間違っていますか?
myObject.__dict__
を使用するのは間違っていますか?
オブジェクトのインスタンス変数のリストにアクセスするには、myObject.__dict__.keys()
を呼び出します。この属性を使用して、オブジェクトのすべてのインスタンス変数を出力します。 __dict__
は「秘密」属性なので、私はこれをすることを躊躇しています。私は何を意味するのか分かりません。this footnote。__dictでPythonインスタンス変数にアクセス__-間違っていますか?
myObject.__dict__
を使用するのは間違っていますか?
脚注の意味は、__dict__
に直接アクセスするのではなく、必要な機能や動作が利用可能かどうかを確認することです。
ので、代わりのようなものやって:
if "__some_attribute__" in obj.__dict__:
# do stuff
をあなたの代わりに行う必要があります。
try:
obj.some_action_i_want_to_do(...)
except AttributeError:
# doesn't provide the functionality I want
異なるオブジェクトが特定のアクションに異なる内部リファレンスを提供しますが、まだ提供することがありますので、その理由があります所望の出力。
現在のオブジェクトをデバッグしたり検査したりするために "内部"を表示する場合は、dir()
が適切です。
しかし、 'dir()'は名前だけを与えます。 '__dict__'はオブジェクト自体も与えます。 –
dir
関数を使用して、オブジェクトのすべての属性をリストすることができます。
この脚注によれば、__dict__
はモジュールオブジェクト上にのみ存在します。
あなたが探しているのはおそらく内蔵のdir()
です。例:
>>> f = open('foo', 'w')
>>> dir(f)
['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines']
'__dict__' *はモジュールとは別のものには存在しません。それはすべてのオブジェクト(組み込み関数、 '__slots__'を持つもの、古いスタイルのクラスインスタンスなど)では存在しませんが。 – delnan
デバッグ用のメンバーを印刷するなどの作業には、これを使用すると問題はありません。しかし、それがあなたがやっていることなら、かわいいプリントをチェックしてください。
http://docs.python.org/library/pprint.html
__dict__
の主な問題は、それが持っているのPythonオブジェクトの暗黙の可視性規則に違反しています。
__dict__
属性のモジュールを脚注に記載しています。オブジェクトの__dict__
属性には、そのような警告はありません(documentation)。
アクセサ、メタクラス、またはスロットが使用されている場合、オブジェクトには同様の警告があります。例外は、Pythonでは非常に安価であるため、ジェネレータでの反復処理を終了するために使用されます。 – Apalala
'?vars(myObject)'が文体的に好きかもしれませんが、それはあなたの質問とは正反対です。それは同じ__dict__を与えます。 –