Skip to content

6.2 classによるクラスの定義

Pythonには、文字列(String)やリスト、辞書など、標準データ型を作るための「組み込みクラス」があらかじめ用意されています。 しかし、今まで誰も作ったことのない新しいオブジェクトを作りたい場合は、オブジェクトを作るための鋳型(設計図)となる「クラス」を自分で定義する必要があります。

最も単純なクラス(空のクラス)

Section titled “最も単純なクラス(空のクラス)”

カスタムオブジェクトを作るには、まず class キーワードを使ってクラスを定義します。 例として、「人(Person)」を表現する最も単純な空クラスを作ってみましょう。

# 空のクラスを定義
class Person():
pass
# クラスからオブジェクト(インスタンス)を作成
someone = Person()

クラス名に続けてかっこ () を書くことで、そのクラスから新しいオブジェクトが作られます。しかし、この空クラスから作ったオブジェクトは何のデータも持たず、何もできません。

__init__() によるオブジェクトの初期化

Section titled “__init__() によるオブジェクトの初期化”

実際に役に立つオブジェクトを作るためには、オブジェクトが作られたときに初期化を行う特殊なメソッド __init__() をクラス内に定義します。

# 初期化メソッドを持つクラス
class Person():
def __init__(self):
pass

この状態でもまだデータを持っていません。次に、名前(name)という属性を持たせてみましょう。

属性(データ)を持つオブジェクトの作成

Section titled “属性(データ)を持つオブジェクトの作成”

__init__() メソッドに引数を追加し、渡された値をオブジェクトの属性として保存するようにします。

class Person():
def __init__(self, name):
# 渡されたnameの値を、自分自身(self)のname属性として保存
self.name = name
# 引数を渡してオブジェクトを作成
hunter = Person('Elmer Fudd')

このコードが実行されると、内部では以下のことが起きています。

  1. Person クラスから新しいオブジェクトがメモリ上に作られる。
  2. 新しいオブジェクト自身を self に、'Elmer Fudd'name 引数として、__init__ メソッドが自動的に呼び出される。
  3. self.name = name によって、オブジェクトの中に値が保存される。
  4. 完成したオブジェクトが hunter という変数に代入される。

作成したオブジェクトの属性(データ)には、オブジェクト名.属性名 の形式で直接アクセスして読み書きすることができます。

# 属性の値を読み出す
print('The mighty hunter:', hunter.name)
# 出力: The mighty hunter: Elmer Fudd