1. はじめに
Pythonでオブジェクトの内部状態を確認したいときに便利なのが、vars()関数です。この記事では、「Python|vars()関数の使い方」というテーマで、基本的な使い方から応用的な活用方法まで、初心者にもわかりやすく解説していきます。
vars()関数は、オブジェクトが持つ属性(インスタンス変数など)を辞書形式で取得できる便利な関数で、特にデバッグやログ出力時に活用されることが多いです。
この記事を読むことで、次のようなことがわかります:
- vars()関数の基本構文と使い方
- 辞書を利用したオブジェクト属性の操作方法
- エラーになりやすいポイントとその対策
2. vars()関数の基本解説と使用例
2-1. vars()関数とは?
vars()関数は、組み込み関数の1つで、オブジェクトの属性を表す辞書(__dict__)を返します。
主に以下のような場面で使います:
- オブジェクトの属性を確認したいとき
- オブジェクトの属性を辞書形式で加工したいとき
2-2. 基本的な使い方
以下はクラスのインスタンスに対してvars()関数を使う例です。
class User:
def __init__(self, name, age):
self.name = name
self.age = age
user = User("Alice", 25)
# vars()で属性を辞書として取得
print(vars(user))
実行結果:
{'name': 'Alice', 'age': 25}
このように、user
オブジェクトの属性が辞書形式で返されます。これは、user.__dict__
と同じ結果です。
3. よくある使い方・応用例
3-1. 辞書として属性を動的に操作する
vars()で取得した辞書を使えば、オブジェクトの属性を動的に変更することもできます。
class Item:
def __init__(self, name, price):
self.name = name
self.price = price
item = Item("Book", 1500)
# priceを変更する
vars(item)['price'] = 1800
print(item.price)
実行結果:
1800
3-2. JSONへの変換時に活用
vars()を使うと、オブジェクトの属性を簡単にJSONに変換できます。
import json
class Product:
def __init__(self, id, name):
self.id = id
self.name = name
product = Product(101, "Keyboard")
# オブジェクトをJSON文字列に変換
json_str = json.dumps(vars(product), ensure_ascii=False)
print(json_str)
実行結果:
{"id": 101, "name": "Keyboard"}
3-3. 関数内のローカル変数を確認する
引数なしでvars()を使うと、ローカルスコープの変数を辞書形式で確認できます。
def debug_example():
x = 10
y = 20
print(vars())
debug_example()
実行結果:
{'x': 10, 'y': 20}
これはデバッグやテスト時に非常に便利な使い方です。
4. 注意点・エラー対策
4-1. __dict__が存在しないオブジェクトではエラー
例えば、組み込み型(リスト、辞書など)や__slots__が使われているクラスには__dict__
が存在しない場合があり、vars()はエラーになります。
print(vars([1, 2, 3])) # リスト型に対して
実行結果:
TypeError: vars() argument must have __dict__ attribute
このようなエラーが出た場合は、vars()を使えるオブジェクトか確認しましょう。
4-2. __slots__使用時の注意
クラス定義で__slots__
を使用すると、__dict__
が使えないため、vars()も利用できなくなります。
class Sample:
__slots__ = ['name']
def __init__(self, name):
self.name = name
s = Sample("Test")
print(vars(s))
実行結果:
TypeError: vars() argument must have __dict__ attribute
このようなクラス設計では別の方法で属性を取得する必要があります。
5. まとめ
- vars()関数は、オブジェクトの属性を辞書形式で取得できる便利な関数
- 属性の確認・変更・JSON変換などに使える
- __dict__がないオブジェクトでは使用できないため注意
実務では、ログ出力時やデバッグツールの作成、またjson.dumps(vars(obj))
のような形でAPIのレスポンス構築にも応用できます。
Pythonに慣れてきたら、dir()やgetattr()などと組み合わせることで、より柔軟にオブジェクトを操作できるようになります。ぜひ併せて学んでみてください。