Pythonの組み込みクラス属性__dict__とは?役割と使い方を徹底解説
__dict__とは何か
Pythonでは、すべてのモジュールやオブジェクトが特別な属性__dict__を持っています。これは、モジュールのシンボルテーブル(名前とオブジェクトの対応表)を格納する辞書です。
object.__dict__
__dict__は、オブジェクトの(書き込み可能な)属性を保存するための辞書、またはその他のマッピングオブジェクトです。クラス属性やインスタンス属性が内部でどのように管理されているかを確認する際に非常に役立ちます。
使用例
次のコードは、__dict__の実際の動作を示したものです。
class MyClass(object):
class_var = 1
def __init__(self, i_var):
self.i_var = i_var
foo = MyClass(2)
bar = MyClass(3)
print(MyClass.__dict__)
print(foo.__dict__)
print(bar.__dict__)出力結果
このコードを実行すると、次のような出力が得られます。
{'__module__': '__main__', 'class_var': 1, '__dict__': <attribute '__dict__' of 'MyClass' objects>, '__weakref__': <attribute '__weakref__' of 'MyClass' objects>, '__doc__': None, '__init__': <function __init__ at 0x0000000004E55CF8>}
{'i_var': 2}
{'i_var': 3}出力の解説
この結果から、以下のことが読み取れます。
- MyClass.__dict__:クラス自体の属性(クラス変数
class_var、メソッド__init__、__module__や__doc__などの特殊属性)が格納されています。 - foo.__dict__:インスタンスfooに固有の属性(
i_var: 2)だけが格納されています。 - bar.__dict__:同様に、インスタンスbarに固有の属性(
i_var: 3)だけが格納されています。
つまり、クラスの__dict__にはクラスレベルで定義された属性が、各インスタンスの__dict__にはそのインスタンス固有の属性がそれぞれ保存されます。属性にアクセスする際、Pythonはまずインスタンスの__dict__を検索し、見つからなければクラスの__dict__を参照するという仕組みになっています。この動作を理解すると、クラス変数とインスタンス変数の違いや、属性の名前解決の仕組みがより明確になります。
-
Pythonの「print >>」構文とは?ファイルへの出力方法を解説
「print >>」は、Python 2における標準のprintステートメントを拡張するための構文です。この構文を使うと、デフォルトの出力先であるsys.stdout(標準出力)ではなく、任意のファイルライクなオブジェクトに対して直接出力できるようになります。つまり、画面に表示する代わりに、ファイルやその他の出力ストリームへ直接書き込むことが可能になります。基本的な使い方例えば、「my_file」という名前のファイルを開いた場合、次のように書き込むことができます。>>> my_file = open(my_file, w) >>> print &
-
Pythonの「%」演算子とは?文字列フォーマットの基本と使い方を解説
Pythonの「%」演算子の役割 Pythonにおける「%(パーセント)」は、文字列フォーマット演算子(補間演算子)として機能します。「format % values」という形式で記述すると、フォーマット文字列内の変換指定子が、values側の要素によって置き換えられます。この仕組みは、C言語のsprintf()関数とよく似ています。 基本的な使い方:文字列の埋め込み 最もシンプルな例は、文字列の中に変数の値を埋め込むケースです。 >>> lang = Python >>> print %s is awesome! % lang Python is awe