Pythonのオブジェクト指向プログラミング(OOP)基本用語をわかりやすく解説
Pythonでオブジェクト指向プログラミング(OOP)を学ぶ際、最初につまずきやすいのが専門用語です。この記事では、PythonにおけるOOPの重要な基本用語を一つずつ丁寧に解説します。各用語の意味を正しく理解することで、クラス設計やコードの読み書きが格段にスムーズになります。
Python OOPの主要用語一覧
- クラス(Class) − オブジェクトのためのユーザー定義の設計図(プロトタイプ)。クラスに属するあらゆるオブジェクトを特徴づける属性の集合を定義します。属性にはデータメンバー(クラス変数とインスタンス変数)とメソッドが含まれ、ドット記法(例:
obj.attribute)を使ってアクセスします。 - クラス変数(Class variable) − クラスのすべてのインスタンス間で共有される変数。クラス定義の中で、かつどのメソッドの外側にも定義されます。インスタンス変数ほど頻繁には使われませんが、「全インスタンス共通の設定値」などを保持するのに便利です。
- データメンバー(Data member) − クラスやそのオブジェクトに関連付けられたデータを保持する、クラス変数またはインスタンス変数のこと。
- 関数オーバーロード(Function overloading) − 同じ名前の関数に対して複数の振る舞いを持たせること。渡される引数の型やオブジェクトの種類によって、実行される処理が変わります。なお、Pythonでは他言語のような厳密な関数オーバーロードはサポートされておらず、デフォルト引数や
*args/**kwargsなどで同様の挙動を実現するのが一般的です。 - インスタンス変数(Instance variable) − メソッド内で定義され、そのクラスの現在のインスタンスだけに属する変数。通常は
__init__メソッドの中でself.変数名の形で定義され、インスタンスごとに独立した値を持ちます。 - 継承(Inheritance) − あるクラスの特性(属性やメソッド)を、そこから派生した別のクラスへ引き継ぐ仕組み。親クラス(基底クラス)のコードを再利用しながら、子クラス(派生クラス)で機能を追加・変更できます。
- インスタンス(Instance) − 特定のクラスに属する個々のオブジェクト。たとえば、
Circleクラスに属するオブジェクトobjは、Circleクラスのインスタンスであるといいます。 - インスタンス化(Instantiation) − クラスからインスタンス(実体)を生成すること。
obj = Circle()のようにクラス名を呼び出すことで行われます。 - メソッド(Method) − クラス定義の中で定義される特別な種類の関数。第一引数に
selfを受け取り、そのインスタンスのデータを操作します。 - オブジェクト(Object) − クラスによって定義されたデータ構造の固有のインスタンス。オブジェクトはデータメンバー(クラス変数とインスタンス変数)とメソッドの両方で構成されます。
- 演算子オーバーロード(Operator overloading) − 特定の演算子(
+や-など)に複数の機能を持たせること。Pythonでは__add__や__sub__といった特殊メソッド(ダンダーメソッド)を定義することで実現できます。
まとめ
これらの用語は相互に関連しており、特に「クラス→インスタンス化→インスタンス」「クラス変数とインスタンス変数の違い」「継承による特性の引き継ぎ」といった関係性は、PythonのOOPを理解する上で最重要ポイントです。まずは小さなクラスを実際に書いてみて、各用語がコード上でどこに対応するのかを確認すると、理解が深まります。
-
Pythonの継承とは?単一継承と階層継承の基本をサンプルコードで解説
本記事では、Python 3.xにおける継承(インヘリタンス)とクラスの拡張方法について詳しく解説します。 継承とは、現実世界のモノや概念の関係性を自然に表現できる、オブジェクト指向プログラミングの中核となる仕組みです。継承を活用すると、次のようなメリットが得られます。 再利用性:すでに書いたコードを流用でき、重複を削減できる 推移性:クラス間の関係を連鎖的に引き継げる 開発速度の向上:ゼロから書かずに済むため、短期間で開発できる 保守性・拡張性:既存クラスを壊さずに機能を追加しやすい 継承の5つの種類 Pythonの継承は、その構造によって主に以下の5種類に分類されます。 単一継承(
-
Pythonのクラスメソッドと静的メソッドの違いを徹底解説
Pythonにおけるクラスメソッド(classmethod)は、クラスのインスタンスではなく、クラスそのものに紐づけられるメソッドです。静的メソッド(staticmethod)もこれと似ていますが、両者にはいくつかの重要な違いがあります。クラスメソッドには@classmethodデコレータを、静的メソッドには@staticmethodデコレータをそれぞれ付与して定義します。 クラスメソッドの構文 class my_class: @classmethod def function_name(cls, arguments): # 関数の処理内容