Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの組み込みクラス属性とは?__dict__・__doc__・__name__などの使い方を実例付きで解説

Pythonの組み込みクラス属性とは

Pythonでは、すべてのクラスが標準でいくつかの組み込み属性(built-in attributes)を持っています。これらは通常の属性と同じように、ドット演算子(.)を使ってアクセスできます。

主な組み込みクラス属性は以下の通りです。

  • __dict__ … クラスの名前空間(namespace)を格納した辞書。
  • __doc__ … クラスのドキュメンテーション文字列(docstring)。定義されていない場合は None
  • __name__ … クラス名。
  • __module__ … クラスが定義されているモジュール名。対話モードでは "__main__" になります。
  • __bases__ … 基底クラス(親クラス)を格納したタプル。基底クラスがない場合は空のタプルになります。並び順は定義時の記述順に従います。

各属性のまとめ表

属性名内容
__dict__クラスの名前空間を保持する辞書
__doc__クラスのdocstring(未定義ならNone)
__name__クラス名
__module__クラスが定義されたモジュール名
__bases__基底クラスのタプル(継承元の一覧)

サンプルコード

以下は、Employee クラスに対してこれらの組み込み属性へアクセスする例です(Python 3系の構文で記述しています)。

#!/usr/bin/python

class Employee:
    'Common base class for all employees'
    empCount = 0

    def __init__(self, name, salary):
        self.name = name
        self.salary = salary
        Employee.empCount += 1

    def displayCount(self):
        print("Total Employee %d" % Employee.empCount)

    def displayEmployee(self):
        print("Name : ", self.name, ", Salary: ", self.salary)

# インスタンスを2つ生成
e = Employee("Taro", 300000)
f = Employee("Hanako", 400000)

print("Employee.__doc__:", Employee.__doc__)
print("Employee.__name__:", Employee.__name__)
print("Employee.__module__:", Employee.__module__)
print("Employee.__bases__:", Employee.__bases__)
print("Employee.__dict__:", Employee.__dict__)

実行結果

上記のコードを実行すると、次のような出力が得られます(関数のアドレス部分は環境によって異なります)。

Employee.__doc__: Common base class for all employees
Employee.__name__: Employee
Employee.__module__: __main__
Employee.__bases__: ()
Employee.__dict__: {'__module__': '__main__', 'displayCount': <function displayCount at 0xb7c84994>, 'empCount': 2, 'displayEmployee': <function displayEmployee at 0xb7c8441c>, '__doc__': 'Common base class for all employees', '__init__': <function __init__ at 0xb7c846bc>}

実行結果のポイント

  • __doc__ には、クラス冒頭に記述したdocstring「Common base class for all employees」がそのまま格納されています。
  • __name__ にはクラス名「Employee」、__module__ にはスクリプトとして直接実行されたことを示す「__main__」が入っています。
  • __bases__ は空のタプル () です。これは Employee クラスが明示的にどのクラスも継承していないためです。
  • __dict__ を見ると、クラス変数 empCount や各メソッド、__init__ など、クラスに属するすべての要素が辞書形式で登録されていることが分かります。

これらの組み込み属性を活用すると、クラスの内部構造を動的に調べたり、リフレクション的な処理を実装したりすることが可能になります。デバッグやメタプログラミングの際にも役立つので、ぜひ覚えておきましょう。

  1. Pythonの継承とは?単一継承と階層継承の基本をサンプルコードで解説

    本記事では、Python 3.xにおける継承(インヘリタンス)とクラスの拡張方法について詳しく解説します。 継承とは、現実世界のモノや概念の関係性を自然に表現できる、オブジェクト指向プログラミングの中核となる仕組みです。継承を活用すると、次のようなメリットが得られます。 再利用性:すでに書いたコードを流用でき、重複を削減できる 推移性:クラス間の関係を連鎖的に引き継げる 開発速度の向上:ゼロから書かずに済むため、短期間で開発できる 保守性・拡張性:既存クラスを壊さずに機能を追加しやすい 継承の5つの種類 Pythonの継承は、その構造によって主に以下の5種類に分類されます。 単一継承(

  2. Pythonでクラスの属性を定義・確認する方法をわかりやすく解説

    クラスの属性とはPythonでは、ほぼすべてのものがオブジェクトとして扱われます。そして、すべてのオブジェクトには属性(アトリビュート)とメソッドが備わっています。つまり、属性はPythonプログラミングにおいて非常に基礎的かつ重要な概念なのです。クラスとは、類似したオブジェクトをまとめて扱うための仕組みであり、クラス自体にも属性を持ちます。ここで注意したいのが、クラス属性とインスタンス属性の違いです。クラス属性は、そのクラスから生成されたすべてのインスタンス間で共有されます。しかし、その逆(インスタンス属性が他のインスタンスやクラスに共有される)は成り立ちません。dir関数でオブジェクトの属