プログラミングが苦手としている人の多くは、このクラスの考え方が理解できずに難しいと感じているのではないでしょうか?pythonの言語も他の言語と同様に「クラス(class)」をよく用いるため、この部分が理解できなければ、プログラミングの独学は非常に難しくなると言い切ってよいでしょう。
pythonをまだ勉強中で、まだ理解できていない方は、この記事を読めば、しっかりと理解できますので、ぜひ最後まで読んでください。
【Python】クラスについての学習は「オブジェクト」「データ」「メゾッド」が何かを理解することから始まる
Pythonのコードは、数値や文字列といった人がプログラム上に記載するものから、すでに用意されているデータ構造や関数やモジュールに至るまですべてを「オブジェクト」と呼びます。分かりやすく言うと、プログラムは、すべてオブジェクトで作り上げているのだと思ってかまいません。
そのオブジェクトには2種類のオブジェクトが存在します。
- 1つは、「属性」や「変数」と呼ばれるデータ
- もう一つは、「関数」や「メゾッド」と呼ばれるコード
どちらもデータ、コードとは呼ばれず、「属性」「変数」「関数」「メゾッド」と呼ばれることが大半だと思っておいてください。しかし、「属性」や「変数」のデータのことをオブジェクトと呼んでいる場合もあるので注意です。しっかりと理解するために以下表でまとめておきます。
名称 | 呼び方 | 意味 | 例 |
データ | 属性 変数 オブジェクト | 数字や文字列などのデータそのものを指す | 数字:4 文字列:”dog” 変数:X |
コード | 関数 メゾッド | 特定の処理(プログラム上の動作)を指す | func() practice() |
ニュアンスとしては、データ(属性・変数・オブジェクト)が名詞、コード(関数、メゾッド)を動詞として捉えるとわかりやすいかと思います。
このデータとコードを使ってPythonプログラミングを行うことになるのです。
class(クラス)を定義すれば、もっと便利で簡単にコードが書ける!
クラスを定義することで、変数や属性、関数やメゾッドが一束にすることができます。
そもそもクラスというのは、上で説明した変数や属性、関数やメゾットを一連の処理するようにしたパッケージであると思っておいて下さい。
クラスは頻出なのですぐに見慣れてくると思います。
クラスの定義とそのクラスの呼び出し例について以下順を追って説明します。
何をしているか | classの定義例 | 内容 | 呼び出し方法 | 注釈 |
classの原型 何もしない | class Adult(): pass | Adultという名前のクラスを作成しただけで、 何もしないクラスを定義しています。 | person = Adult() | Adultの文字列はどんな文字列でも構いません。 passは「このクラスが空である」ことを示している。 |
classに初期化を 入れた。 特に何もしない | class Adult(): def __init__(self): pass | Adultという名前のクラスを初期化するだけで、 それ以外は、何もしないクラス。 | person = Adult() | __init__で初期化するための特殊文字を使っている selfは作られたオブジェクト自体を示している。 |
nameという変数を与えてみる。 | class Adult(): def __init__(self ,name ): self.name = name | Adultという名前のクラスを初期化し、クラスAdultのnameの変数に、代入しています。 | person = Adult(“DEN”) | クラスの呼び出し時に、Adult()のカッコ内に入れた変数は__init__の初期化の変数になります。※ |
※ルール:__init__は初期化メゾッドと呼び、__init__()のカッコ内の第一引数は必ずselfが入ります。そのため、クラス内では、「def __init__(self , 好きな変数):」という風に書かれることになります。
ん?self.name = name なんだこれ?
def __init__(self , name)の初期メゾットのカッコ内の変数はnameとなっていますが、self.name=nameという2つの”name”が登場してしまいました。(上表の赤線部)
ここで同じnameをつかっていますが、実は別の変数なのです。、
➀def __init__(self , name)の中にあるname は一時的な変数で、処理が終われば消えてしまう値。
➁self.nameのnameは、class Adultで定義されている値で、personというクラスの中でデータが保管される。
つまり、self.nameにデータを移し、クラスの外から参照できるようにするのです。
ここで重要なルールをお伝えします。
classの中の値を参照する場合は、「class名.変数名」を使う
///クラスの定義///
class Adult():
def __init__(self ,name ):
self.name = name
print(‘クラスの内部での名前は ‘, self.name)
///クラスの呼び出し///
person = Adult(“DEN”)
NAME = person.name
上記の例を参考に、クラスの中で処理された値を参照したい場合、2つのやり方が存在します。
1,クラスの中からそのクラスの値を参照する場合、
「self.参照したい変数名」を使用します。
例の場合は、「self.name」を使用することになります。
2,クラスの外からそのクラスの値を参照する場合、
「クラス名.変数名」を使用すればOKです。
例の場合は、「person.name」を使用することになります。