1. はじめに
Pythonの学習を進める中で、「オブジェクト指向」という言葉に出会うことが多くなります。
この記事では、「Python|オブジェクト指向とは?概念と用語をやさしく理解」というテーマで、初心者の方でも理解しやすいように、オブジェクト指向の基本から、用語、コード例まで丁寧に解説します。
Pythonにおけるオブジェクト指向の考え方を理解することで、より効率的で保守性の高いプログラムを書くことができるようになります。
2. Pythonのオブジェクト指向とは?基本概念をやさしく解説
2-1. オブジェクト指向とは何か?
オブジェクト指向とは、「データ」と「そのデータに対する操作(処理)」を一つにまとめて扱うプログラミングの考え方です。
Pythonでは、すべてが「オブジェクト」として扱われており、オブジェクトには「属性(データ)」と「メソッド(処理)」が備わっています。
2-2. クラスとインスタンスの関係
オブジェクト指向の中核となるのが「クラス」と「インスタンス」です。
「クラス」は設計図、「インスタンス」はその設計図から作られた具体的なモノ、と考えるとわかりやすいです。
# クラスの定義
class Dog:
def __init__(self, name):
self.name = name # 属性
def bark(self): # メソッド
print(f"{self.name}がワン!と吠えました")
# インスタンスの作成
my_dog = Dog("ポチ")
# メソッドの呼び出し
my_dog.bark()
実行結果:
ポチがワン!と吠えました
このように、クラスを定義してインスタンスを生成することで、オブジェクトの機能を活用できます。
3. よくある使い方・応用例
3-1. 属性やメソッドを増やして拡張する
クラスは自由にカスタマイズできるため、複雑なオブジェクトを設計することも可能です。以下は複数の属性やメソッドを持つクラスの例です。
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
print(f"{self.name}({self.age}歳)がワン!と吠えました")
def birthday(self):
self.age += 1
print(f"{self.name}の年齢は{self.age}歳になりました")
# 使用例
dog = Dog("コロ", 3)
dog.bark()
dog.birthday()
実行結果:
コロ(3歳)がワン!と吠えました
コロの年齢は4歳になりました
3-2. 継承を使ってクラスを再利用する
オブジェクト指向の大きな特徴のひとつに「継承」があります。親クラスの機能を引き継ぎつつ、独自の機能を追加できます。
# 親クラス
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name}が何かを話しました")
# 子クラス
class Cat(Animal):
def speak(self):
print(f"{self.name}がニャーと鳴きました")
# 使用例
cat = Cat("タマ")
cat.speak()
実行結果:
タマがニャーと鳴きました
4. 注意点・エラー対策
4-1. selfの書き忘れに注意
インスタンス変数やメソッドの定義では、self
を必ず引数に含める必要があります。これを忘れると以下のようなエラーになります。
class Sample:
def show(): # self を忘れている
print("Hello")
s = Sample()
s.show()
実行結果:
TypeError: show() takes 0 positional arguments but 1 was given
4-2. クラス名とメソッド名の命名に注意
クラス名は大文字始まり(キャメルケース)、メソッドや変数名は小文字(スネークケース)にするのがPythonの慣習です。可読性が高まり、他のコードとも統一されます。
5. まとめ
この記事では、Pythonのオブジェクト指向について、初心者向けにやさしく解説しました。クラスやインスタンス、継承の基本を学ぶことで、より柔軟で再利用性の高いコードが書けるようになります。
実務においては、複数人での開発や、長期間にわたる保守性が求められるプロジェクトで、オブジェクト指向の設計は非常に有効です。
まずは簡単なクラスを自作して、メソッドや属性を自在に扱えるように練習してみましょう!