- Pythonを無料で学習したい
- Pythonをわかりやすく教えてほしい
- Pythonでさまざまな教材やスクールを利用したけどイマイチ理解ができなかった
本記事は上記のような人のためにPython文法をわかりやすく解説していきます。
プログラミング初心者の方だと、主にプログラミング特有の概念などに理解を詰まらせることが多いように感じます。
そこでPythonの文法について「無料で・わかりやすく・網羅的に」学ぶことができるように本記事シリーズを作成しました。
本記事シリーズを読めばPythonコードを自由自在に操れるようになります。
そして、学習の進め方としては40~60%の理解でどんどん進めていくことと、何度も復習することが大切です。
Python文法の入門講座⑤では「クラス・インスタンス」について学習していきます。
※本記事は内容を随時更新していきます。
クラスとインスタンス
本記事ではクラスとインスタンスについて学習していきます。
クラスとインスタンスは、初心者にとってなかなか腑に落ちにくい論点なので一度で理解しようとせずに何度も反復することが大切です。
このクラスとインスタンスについて、それぞれ一言で表すと、クラスは「型」でインスタンスは「実体物」となります。
両者の関係はクラスという「型」をもとにしてインスタンスという「実体物」をつくるといったイメージです。
車を例にすると下の図のようになります。
それではクラスとインスタンスについてそれぞれ深掘りしていきます。
クラス
クラスとはデータと処理をまとめたものです。
Pythonではこのデータのことをアトリビュートといい、処理のことをメソッドといいます。
アトリビュートはクラス内で定義された変数のことです。
そのためアトリビュートは通常の変数と同じように文字列や数値を代入したり取り出したりすることができます。
また、メソッドはクラス内に定義された関数のことです。
そのためメソッドも基本的に通常の関数と同じように扱うことができます。
ただ、メソッドには通常の関数と違うところがあって、それは「def」で関数を定義する際に、関数名()のカッコ内に必ずselfという引数を記述しなければならないという点です。
アトリビュートと変数、メソッドと関数、それぞれの違いはクラス内にあるかクラス外にあるかというところです。
アトリビュートとメソッドはクラス内にあり、変数と関数はクラス外にあるということになります。
そして、クラスは下の図のように定義します。
次で「インスタンス」を学習した後にコードの記述を確認しましょう。
インスタンス
インスタンスとはクラスに基づいて生み出されたオブジェクト(実体物)のことです。
オブジェクトとはデータやメソッドを持ったもので、今までの学習で扱ってきた値はすべてオブジェクトになります。
つまりPythonで扱われる値はすべてオブジェクトなのです。
クラスはインスタンスの生成をして初めて使えるようになります。
なぜかというとクラスという設計書を定義したところでインスタンスという実体物をつくらないと扱える値が存在しないからです。
そして、つくられたインスタンスは変数に代入して使えるようになります。
それではインスタンスの生成からメソッドの使い方までを以下の図で確認しましょう。
それではクラスの定義からインスタンスを生成し、メソッドを使うまでを実際にコードで記述していきます。
例)
class Fruits : #「Fruits」というクラスを定義
def introduction(self, name) : #「introduction」というメソッドを定義
print(name)
apple = Fruits() #Fruitsクラスからインスタンスを生成し、変数「apple」に代入
apple.introduction("りんご") #Fruitsクラスのメソッドであるintroductionメソッドを使用
#処理結果
=>りんご
コンストラクタ(初期化メソッド)
コンストラクタとはインスタンスの生成をする時に自動的に実行されるメソッドのことです。
コンストラクタは初期化メソッドとも呼ばれ、「__init__()」と記述します。
イメージとしては例えば「人」クラスを定義する場合、名前欄や性別欄、出身地欄などを初期化メソッドでつくっていくということです。
実際にコードを記述して理解を深めましょう。
例)
class Fruits :
def __init__(self, name, color) : #__init__メソッドを定義
self.name = name #「self」とはインスタンス自身を指す
self.color = color
def attract(self, text) : #「attract」というメソッドを定義
print(text)
apple = Fruits("りんご", "レッド") #__init__メソッドへ引数を渡し、インスタンスを生成
apple.name #__init__メソッドの「name」を呼び出す
#処理結果
=>りんご
apple.color #__init__メソッドの「color」を呼び出す
#処理結果
=>レッド
apple.attract("甘くて程よい酸味があって美味しいですよ!") #attractメソッドを使用
#処理結果
=>甘くて程よい酸味があって美味しいですよ!
orange = Fruits("みかん", "オレンジ") #__init__メソッドへ引数を渡し、インスタンスを生成
orange.name #__init__メソッドの「name」を呼び出す
#処理結果
=>みかん
orange.color #__init__メソッドの「color」を呼び出す
#処理結果
=>オレンジ
orange.attract("ビタミンCたっぷり!") #attractメソッドを使用
#処理結果
=>ビタミンCたっぷり!
クラスを一度定義しておけば、あとからいくらでもインスタンスを作ることができます。
クラスの継承
クラスの継承とはあるクラスからデータや処理を受け継ぐことです。
受け継ぐ元のクラスを親クラス、親クラスを受け継いで新しく定義されるクラスを子クラスと呼びます。
クラスを継承すると、そのクラスの機能などの一部を変更するだけで新しいクラスを定義することができるため、効率的にコードの記述をすることができます。
例えば既存のクラスと内容がほとんど一緒だけど少しだけ変更を加えたい場合、わざわざ同じ変数やメソッドを記述する手間を省いて新しいクラスをつくることができるのです。
クラスの継承をする時はコードの記述量を少なくするためにsuperメソッドというものを使います。
下の図でクラスの継承について確認してみましょう。
それでは実際にコードを記述してみます。
例)
class Fruits : #親クラスのFruitsクラスを定義
def __init__(self, name, color) : #__init__メソッドを定義
self.name = name
self.color = color
def attract(self, text) : #「attract」というメソッドを定義
print(text)
class Souvenir_Fruits(Fruits) : #親クラスとしてFruitsクラスを継承し、子クラスのSouvenir_Fruitsクラスを定義
def __init__(self, name, color, prefecture) :
super().__init__(name, color) #superメソッドを使ってFruitsクラスの__init__メソッドを継承
self.prefecture = prefecture
aomoringo = Souvenir_Fruits("りんご", "レッド", "青森")
aomoringo.name #Fruitsクラスにおける__init__メソッドの「name」を呼び出す
#処理結果
=>りんご
aomoringo.color #Fruitsクラスにおける__init__メソッドの「color」を呼び出す
#処理結果
=>レッド
aomoringo.prefecture #Souvenir_Fruitsにおける__init__メソッドの「prefecture」を呼び出す
#処理結果
=>青森
aomoringo.attract("青森の名産品りんご!") #クラスの継承をしているためFruitsクラスのattractメソッドを使用できる
#処理結果
=>青森の名産品りんご!
まとめ
Python文法の入門講座⑤では「クラス・インスタンス」について学習しました。
今回の内容はなかなか掴みづらい難しい内容だったと思います。
クラスとインスタンスに関してはクラスを定義してインスタンスの生成やメソッドの使用を実際にコードを記述しながら会得することが大切です。
本当に難しいテーマだったと思いますがお疲れ様でした。
次回Python文法の入門講座⑥では今まで学習した内容の応用論点について学習していきます。
こちらからどうぞ!
Pythonを無料で学習したいPythonをわかりやすく教えてほしいPythonでさまざまな教材やスクールを利用したけどイマイチ理解ができなかった 本記事は上記のような人のためにPython文法をわかりやすく解説していきます。プログ[…]
なお、他のPython文法の入門講座シリーズはこちらから!
Pythonを無料で学習したいPythonをわかりやすく教えてほしいPythonで他の教材やスクールを利用したけどイマイチ理解ができなかった 本記事は上記のような人のためにPython文法をわかりやすく解説していきます。プログラミン[…]
Pythonを無料で学習したいPythonをわかりやすく教えてほしいPythonでさまざまな教材やスクールを利用したけどイマイチ理解ができなかった 本記事は上記のような人のためにPython文法をわかりやすく解説していきます。プログ[…]
Pythonを無料で学習したいPythonをわかりやすく教えてほしいPythonでさまざまな教材やスクールを利用したけどイマイチ理解ができなかった 本記事は上記のような人のためにPython文法をわかりやすく解説していきます。プログ[…]
Pythonを無料で学習したいPythonをわかりやすく教えてほしいPythonでさまざまな教材やスクールを利用したけどイマイチ理解ができなかった 本記事は上記のような人のためにPython文法をわかりやすく解説していきます。プログ[…]