LoginSignup
10
8

More than 3 years have passed since last update.

Pythonで変数(インスタンス)の詳細を確認する

Last updated at Posted at 2019-05-15

はじめに

Rubyのpメソッドみたいなものがpythonにないのかなぁ、と調べた結果です。

結果

vars関数を使えば似たような動きをしました!

Googleで「Ruby Python p 代替」で調べても出てきません。(調べ方が悪い)
「python オブジェクト ダンプ」で参考ページが出てきました!
似たような感じでvarsにたどり着いていない方に共有です。

とあるクラスのインスタンスaをprintで表示すると以下のようになります。

printの場合
>>> print(a)
<QuerySet [<Project: aaa>, <Project: bbb>, <Project: ccc>]>

このインスタンスaのプロパティが何かわかってなくて、内容を見たいんだ!(自分の実装を忘れてしまう私のような人はあまりいませんかね…)
って時にvarsを使います。

varsの場合
>>> vars(a[0])
{'_state': <django.db.models.base.ModelState object at 0x04318C50>, 'id': 1, 'name': 'aaa', 'description': 'aaa', 'created_date': datetime.datetime(2019, 4, 10, 3, 17, 58, tzinfo=<UTC>), 'owner': 1}

すばらしいです…!
a[0]って添え字を指定しているので、全部出したい人はeach等使って、くるくる回してください。

更に、値やメソッドの名前だけを知りたい場合、dir関数を使えばよいとのこと、アドバイスを頂きました。
(shiracamusさんありがとうございます!)

dirの場合
>>> dir(a[0])
['DoesNotExist', 'MultipleObjectsReturned', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_check_column_name_clashes', '_check_field_name_clashes', '_check_fields', '_check_id_field', '_check_index_together', '_check_indexes', '_check_local_fields', '_check_long_column_names', '_check_m2m_through_same_relationship', '_check_managers', '_check_model', '_check_model_name_db_lookup_clashes', '_check_ordering', '_check_property_name_related_field_accessor_clashes', '_check_single_primary_key', '_check_swappable', '_check_unique_together', '_do_insert', '_do_update', '_get_FIELD_display', '_get_next_or_previous_by_FIELD', '_get_next_or_previous_in_order', '_get_pk_val', '_get_unique_checks', '_meta', '_perform_date_checks', '_perform_unique_checks', '_save_parents', '_save_table', '_set_pk_val', '_state', 'check', 'clean', 'clean_fields',
'created_date', 'date_error_message', 'delete', 'description', 'from_db', 'full_clean', 'get_deferred_fields', 'get_next_by_created_date', 'get_previous_by_created_date', 'id', 'name', 'objects', 'owner', 'pk', 'prepare_database_save', 'refresh_from_db', 'save', 'save_base', 'serializable_value', 'sheets', 'unique_error_message', 'validate_unique']

なんでも調べられますね…ッ!

参考

こちらのページがそのものズバリでした。
https://minus9d.hatenablog.com/entry/2015/08/02/204226

10
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8