オブジェクト指向プログラミングの基本を学ぼう!
前回はクラスとインスタンスの基本について学びましたね。クラスは設計図で、インスタンスはその設計図から作られた実体でした。
今回は、インスタンスが作られるときに最初に呼ばれる特別なメソッド「コンストラクタ(__init__
)」と、インスタンスが持つ操作「メソッド」について詳しく見ていきましょう!これらを理解することで、より実用的なクラスを作成できるようになります。💪
1. コンストラクタ (__init__) とは? 🤔
コンストラクタは、クラスからインスタンスを作成するときに自動的に呼び出される特別なメソッドです。メソッド名は __init__
(アンダースコア2つ + init + アンダースコア2つ)と決まっています。
主な役割は、インスタンスの初期化です。インスタンスが作られた直後に、そのインスタンスが持つべき属性(データ)に初期値を設定するために使われます。
例を見てみましょう。
class Dog:
# コンストラクタ (__init__メソッド)
def __init__(self, name, breed):
print(f"{name}という名前の{breed}が生まれたワン! 🐾")
# インスタンス変数(属性)を初期化
self.name = name
self.breed = breed
# インスタンスを作成 (この瞬間に __init__ が呼ばれる)
my_dog = Dog("ポチ", "柴犬")
another_dog = Dog("ハチ", "秋田犬")
# インスタンスの属性にアクセス
print(f"私の犬の名前は {my_dog.name} で、犬種は {my_dog.breed} です。")
print(f"もう一匹の犬の名前は {another_dog.name} で、犬種は {another_dog.breed} です。")
💡 self って何?
__init__
メソッドの最初の引数 self
は、作成されるインスタンス自身 を指します。Pythonが自動的に渡してくれるので、自分で指定する必要はありません。
self.name = name
のように書くことで、「このインスタンスのname
という属性に、引数で受け取ったname
の値を設定する」という意味になります。これにより、各インスタンスが固有のデータを持つことができます。
コンストラクタを使うことで、インスタンス作成時に必要な情報を渡し、初期状態を確実に設定することができます。
2. メソッドとは? 🛠️
メソッドは、クラス内に定義された関数のことです。クラスの属性(データ)にアクセスしたり、特定の操作を実行したりするために使われます。
メソッドも、最初の引数として self
を受け取るのが一般的です。これにより、メソッドはそのメソッドが呼び出されたインスタンス自身の属性にアクセスしたり、変更したりできます。
先ほどの Dog
クラスに、自己紹介するメソッドを追加してみましょう。
class Dog:
# コンストラクタ
def __init__(self, name, breed):
print(f"{name}という名前の{breed}が生まれたワン! 🐾")
self.name = name
self.breed = breed
# メソッド (自己紹介)
def introduce(self):
# self を使ってインスタンス自身の属性にアクセス
print(f"ワン! 僕の名前は {self.name} だよ。犬種は {self.breed} だワン!")
# メソッド (鳴く)
def bark(self, sound="ワンワン!"):
print(f"{self.name}: {sound}")
# インスタンスを作成
my_dog = Dog("ポチ", "柴犬")
# メソッドを呼び出す
my_dog.introduce() # 出力: ワン! 僕の名前は ポチ だよ。犬種は 柴犬 だワン!
my_dog.bark() # 出力: ポチ: ワンワン!
my_dog.bark("キャンキャン!") # 出力: ポチ: キャンキャン!
another_dog = Dog("ハチ", "秋田犬")
another_dog.introduce() # 出力: ワン! 僕の名前は ハチ だよ。犬種は 秋田犬 だワン!
another_dog.bark("グルル...") # 出力: ハチ: グルル...
このように、メソッドを定義することで、クラス(設計図)に「振る舞い」や「機能」を追加できます。インスタンスごとにメソッドを呼び出すと、そのインスタンス自身のデータ(self.name
など)を使って処理が行われます。
3. まとめ 📝
今回は、オブジェクト指向プログラミングにおける重要な要素、コンストラクタ(__init__
)とメソッドについて学びました。
__init__
はインスタンス生成時の初期設定を担当します。- メソッドはインスタンスが持つ機能や操作を定義します。
- どちらも
self
を通してインスタンス自身にアクセスします。
これらを使いこなすことで、データとそれを操作する手続きをひとまとめにした、再利用性の高いコードを書くことができます。オブジェクト指向の考え方に慣れていきましょう! 😄
次は、「継承とオーバーライド」について学び、クラスの機能をさらに拡張する方法を見ていきます。
参考情報 📚
より詳しく知りたい場合は、Pythonの公式ドキュメントも参照してみてください。
-
Python 公式ドキュメント – クラス:
https://docs.python.org/ja/3/tutorial/classes.html
特に「9.3. インスタンスオブジェクト」「9.3.1. 属性参照」「9.3.2. メソッドオブジェクト」などが関連します。
-
Python 公式ドキュメント – データモデル (
__init__
など特殊メソッドについて): https://docs.python.org/ja/3/reference/datamodel.html#basic-customization__init__
のような特殊メソッドの動作について解説されています。
コメント