NO IMAGE

Pythonのクラスとインスタンス~selfとは?~

Pythonのクラスとインスタンス~selfとは?~

クラスとはデータと処理をまとめたものです。

データ→アトリビュート

処理→メソッド

と呼ばれます。

アトリビュートは、クラス内で定義された変数のことです。

クラスにアトリビュートを作ることを「アトリビュートを定義するといいます。

アトリビュートと変数のちがいは、クラスの外にあるかどうかです。

メソッドは、クラス内に定義された関数です。

メソッドを定義する場合、必ず1つ引数を記述しなければならないです。渡したい引数がない場合でも、必ず引数が一つ必要になります。

この引数は、どんな引数名でもよいのですが、selfと書かれていることが多いです。

つまり、メソッドに渡したい引数がない場合、メソッドの引数にselfを記述します。

メソッドに渡したい引数が1つの場合、メソッドの引数にselfと渡したい引数名の合計2つ。

メソッドに渡したい引数が2つの場合、メソッドの引数にselfを含めた合計3つの引数を記述します。

このselfの役割は、Pythonがプログラムの実行で使っているものです。

理屈が少し複雑なので、メソッドの引数にはどんな場合もselfと書くと覚えてしまいましょう。

[クラスの例]
数学が80点、英語が70点という点数は、aという学級の出席番号001番の人

クラス名をStudentとします(クラス名の最初の文字は大文字にしましょう)

そのクラスに生徒の名前を代入する「name」というアトリビュートを定義します。そして、数学と英語の点数を計算するavgというメソッドを定義します。

メソッドの定義方法は、関数と同じく

def

で定義します。

クラスは、クラスから作られたインスタンスを変数に代入してから使います。クラスはインスタンスになって初めて使えるようになります。

クラスを使えるような状態にすることを「インスタンス化」「オブジェクト化」と言ったりします。

つまり、インスタンス化とは、クラスという型から、インスタンスという実際につかえるものを作ることをいいます。

インスタンス化は、

インスタンス(変数)=クラス名()

となります。(例で言うと、a001=Student())

メソッドの実行方法は、

インスタンス変数.メソッド名()

です。(例で言うと、a001.avg())

class Student:

def avg(self):

print((80+70)/2)

a001=Student()

a001.avg()

実行結果は75.0

ここまでは、点数を直接メソッドの中に記述しました。これだと生徒が変わるごとにメソッドの書き換えが必要です。これを引数で渡して計算できるようにしましょう。そうすることでクラスを使いまわせるようになります。アトリビュート(例の場合、a001.nameとします)にも値を代入できます。

class Student:

def avg(self,math,english):

print((math+english)/2)

a001=Student()

a001.avg(80,70)

a001.name="sato"

print(a001.name)

実行結果

75.0

sato

新しいインスタンスを作るごとに、アトリビュートを定義する必要があります。その不便さを解消するのが、コンストラクタです。コンストラクタは、インスタンス化するときに、自動的に実行されるメソッドです。コンストラクタは、初期化メソッドともいいます。コンストラクタでインスタンス変数を初期化する構文は、

def__init__(self,引数):
self.インスタンス変数=引数

となります。

class Student:

def__init__(self):

self.name=""

def avg(self,math,english):

print((math+english)/2)

a001=Student()

a001.name="sato"

print(a001.name)

a002=Student()

a002.name="tanaka"

print(a002.name)

実行結果

sato

tanaka

アトリビュートは、インスタンス化と同時に代入することもできます。

class Student:

def__init__(self,name):

self.name="name"

def avg(self,math,english):

print((math+english)/2)

a001=Student("sato")

print(a001.name)

a002=Student("tanaka)

print(a002.name)

実行結果

sato

tanaka

まとめ

クラスは一度定義しておけば、後からいくらでもインスタンスをつくることができます。車を作る設計図がクラスです。もう一つ例えると、クラスは、パソコンで使うコピー&ペーストです。

もしクラスがなければ、生徒ひとりひとりのためにStudentクラスを書かなければいけないので面倒です。クラスがあるから効率よくコードを書くことができます。

class Student:  ←クラス

def__init__(self,name):  ←コンストラクタ

self.name=”name”  ←アトリビュート

def avg(self,math,english):  ←メソッド

print((math+english)/2)

a001=Student(“sato”)  ←インスタンス

print(a001.name)

NO IMAGE
最新情報をチェックしよう!
>プログラミング 独学

プログラミング 独学

本当にプログラミングを学びたい人のためになるブログにしたいと思っていますので、些細なことでも気が付いたのであればご報告いただけると幸いです。

CTR IMG