クラス
クラスとオブジェクト
オブジェクトが何かしらの形のあるものだとすれば、クラスはその形を作るための鋳型だと考えることができます。この鋳型があることにより、大量のオブジェクトを好きな時に簡単に作れるようになります。
クラスの定義とインスタンスの作成
クラスの定義の仕方とインスタンスの作成を見ましょう。インスタンスの作成とはクラスの定義を用いて、オブジェクトを実際に作成することを言います。
# hero.py class Hero(): pass hero = Hero() # インスタンスの作成
# 実行結果 (python hero.py) # 何もなし
クラスの作成
1. classを宣言する。その左側に任意のクラス名を書く。
2. クラスの中に定義を書く(今回はpassのみ)。
上記の手順によりクラスを定義することができます。
インスタンスの作成
上記の手順によりインスタンスを作成することができます。今回のインスタンスはクラスの定義で何も定義されていないため何もしません。 このようなクラスを空クラスと呼びます。
クラスの定義と初期化
それではだんだんと意味のあるクラスを作成していきましょう。今度は初期化のメソッドを持ったクラスを作成します。
# hero.py class Hero(): def __init__(self, name): self.name = name hero1 = Hero('ヨシヒコ') # selfは暗黙のうちに引数として、呼び出されるので書かない。 print(hero1.name) hero2 = Hero('ヨシピコ') print(hero2.name)
# 実行結果 (hero.py)
ヨシヒコ
ヨシピコ
インスタンスの作成
- Heroクラスの定義を探し出す。
- インスタンスが作成される。
- 新しく作ったインスタンスをself、もう一つの引数('ヨシヒコ'や'ヨシピコ')をnameに引数として渡し、インスタンスの__init__()メソッドを呼び出す。
- nameの値をインスタンスのself.nameに格納する。
- オブジェクトに名前(hero1やhero2)を与える。
今回は、クラス内に__init__()メソッドを作成しました。__init()__メソッドは、クラス定義から個々のオブジェクトを作成するときに初期化するメソッドに付けられた特殊名である。self引数は、作られたオブジェクト自体を参照すること意味します。クラス定義で__init__()メソッドを定義するとき、第1引数はselfにしなければなりません。第2引数以降は何でも構いません。また、今回の引数で渡したnameはオブジェクトの属性となります。そのため、オブジェクトの外からはオブジェクト名.nameのようにしてアクセスすることができます。クラスの内部でアクセスする場合はself.nameのようにselfを用います。
注意
__init__()関数は初期化をする場合には必要ですが全てのクラスに必要なわけではありません。同じクラスから複数のオブジェクトを作成したりする場合は、他のオブジェクトと区別するために必要な処理を行うために使います。
クラスの定義とメソッド
今度は、__init__()メソッドとそれ以外のメソッドを持ったクラスを定義してみましょう。
# hero.py class Hero(): def __init__(self, name): self.name = name # 自己紹介のメソッド selfを引数にとる def SelfIntroduction(self): print("私の名前は勇者%sです。" % (self.name)) hero = Hero('ヨシヒコ') hero.SelfIntroduction()
# 実行結果 (python hero.py)
私の名前は勇者ヨシヒコです。
今回は、SelfIntroduction()メソッドを作成しました。呼び出し方は属性にアクセスするときと同様に、オブジェクト名.メソッド名です。しっかりと自己紹介できたことがわかります。このようにいろいろなメソッドを定義していくことにより、オブジェクトに様々なことさせることが可能になります。
最後に
お疲れ様でした。次回はクラスのメソッドについてもう少し詳しく説明していきます。