Python基礎として、「クラス」や「インスタンス」というものがあります。
Pythonのプログラミングを学ぶ上で、重要な機構です。
本記事では、そんなPython基礎となるクラスとインスタンスについて、詳しくご説明します。
クラスとインスタンス
クラスとインスタンスについて、以下にご説明します。
クラス
文字列データであればstr型、数値データであればint型など、オブジェクトには特定の型があります。
Pythonでは上記のような特定の型を独自に作成することができます。
そのために使用するのが、クラスという機構です。
Python標準で定義されている型は、以下の通りクラスであることが分かります。
#input
print("①",type("あいうえお"))
print("②",type(12345))
print("③",type([1,2,3,4,5]))
#output
① <class 'str'>
② <class 'int'>
③ <class 'list'>
上記は、オブジェクトの型を所得するtype()関数を使用して、各オブジェクトの型を調べています。
この出力から、①はstrクラス、②はintクラス、③はlistクラスのオブジェクトであることが分かります。
オブジェクトとは、データを抽象的に表したものです。
クラスとは、オブジェクトを表現するための重要な機能(設計図)です。
インスタンス
上記説明の通り、オブジェクトとは抽象的に表された任意のデータのことです。
クラスの設計図で具現化された実体データであることを強調する際に、インスタンスと呼ぶことがあります。
実例という意味のinstanceで覚えるようにしましょう。
例えば、上記例①では、「str型」はクラスで、「あいうえお」はインスタンス(オブジェクト)です。
クラスの定義
クラスを定義するのに使用するのが、class文です。
クラス名については、単語の先頭は大文字で、複数の単語は記号を使わずにつなげる方法が推奨されています。
以下に例を載せます。
#input
class ApplePie:
pass
クラス名の後にはコロンを入れます。
要素を持たない定義として、pass文を使用しています。
pass文とは何もしない文で、何も実行させない場合に使用する文です。
インスタンスの生成
上記で作成したクラス「ApplePie」からインスタンスを生成します。
インスタンスを生成するには、クラス名()という関数を呼び出す必要があります。
#input
apple = ApplePie()
print(type(apple))
#output
<class '__main__.ApplePie'>
クラス「ApplePie」からインスタンス「apple」を生成できました。
出力結果の「__main__.」は、「ApplePie」がPythonの対話環境上で定義されたクラスであることを表しています。
クラスとインスタンスの属性
オブジェクトに存在する変数や関数を、属性(attribute)と言います。
上記で作成した「ApplePie」クラスのインスタンスである「apple」の属性を調べた結果を、以下に載せます。
属性を調べるには、dir()関数を使用します。
#input
print(dir(apple))
#output
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
アンダースコアで挟まれたものが属性です。
クラス「ApplePie」を定義した際にはpass文を使用しましたが、属性がいくつか定義されていることが分かります。
これは、Pythonに標準として用意されているobjectクラスと呼ばれる基盤クラスから自動的に継承された属性です。
インスタンス「apple」に固有の属性を追加した例を以下にご紹介します。
#input
apple.i = 100
apple.j = 200
print(dir(apple))
#output
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'i', 'j']
属性に「i」と「j」が追加されたことが分かると思います。
「i」と「j」のようなApplePieクラスの個々のインスタンスが持つ変数をインスタンス変数と言います。
インスタンスメソッド
インスタンス変数は、上記例のように属性に代入することもできますが、インスタンスを生成するタイミングでも定義することが可能です。
インスタンス生成タイミングで定義するためには、コンストラクタ関数__init__を使用します。
インスタンス変数をインスタンス生成タイミングで定義した例を以下にご紹介します。
#input
class ApplePie:
def __init__(self):
self.i = 100
self.j = 200
self.k = self.i + self.j
apple = ApplePie()
print(apple.k)
#output
300
「def __init__(self)」でインスタンスの初期設定を行い、「apple = ApplePie()」でインスタンス生成する際にインスタンス変数が定義されています。
この「self」は記述必須の引数ですので、忘れないようにしましょう。
__init__メソッドの「self」の後に引数を入れた場合の例を以下に載せます。
#input
class ApplePie:
def __init__(self,i,j):
self.i = i
self.j = j
self.k = self.i + self.j
apple = ApplePie(100,200)
print(apple.k)
#output
300
インスタンス変数を初期化した状態で、「apple = ApplePie(100,200)」でi=100,j=200を指定しています。
このようにインスタンスを紐づかせ、インスタンスを介してアクセスするメソッドをインスタンスメソッドと言います。
クラスメソッド
上記例では、インスタンスを介したアクセスをご紹介しましたが、クラスから直接アクセスするやり方もあります。
このクラスそのものを紐づかせるメソッドをクラスメソッドと言います。
クラスメソッドの具体例を以下にご紹介します。
#input
class ApplePie:
@classmethod
def clmd(cls,text):
print(text)
ApplePie.clmd("ClassMethod")
#output
ClassMethod
クラスから直接アクセスされていることが分かるかと思います。
上記例のように、クラスメソッドを定義するには、一行前に「@classmethod」を記述します。
これはデコレータというもので、既存の定義を新たにする場合に用いられます。
まとめ
この記事では、Python基礎となるクラスとインスタンスについて、ご説明しました。
本記事を参考に、ぜひ独自に定義を試してみて下さい。
参考
Python学習用おすすめ教材
Pythonの基本を学びたい方向け
統計学基礎を学びたい方向け
Pythonの統計解析を学びたい方向け
おすすめプログラミングスクール
Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。
私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。
現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。
無料体験ができますので、まずは試してみてください!