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')このコードが実行されると、内部では以下のことが起きています。
Personクラスから新しいオブジェクトがメモリ上に作られる。- 新しいオブジェクト自身を
selfに、'Elmer Fudd'をname引数として、__init__メソッドが自動的に呼び出される。 self.name = nameによって、オブジェクトの中に値が保存される。- 完成したオブジェクトが
hunterという変数に代入される。
属性へのアクセス
Section titled “属性へのアクセス”作成したオブジェクトの属性(データ)には、オブジェクト名.属性名 の形式で直接アクセスして読み書きすることができます。
# 属性の値を読み出すprint('The mighty hunter:', hunter.name)# 出力: The mighty hunter: Elmer Fudd