プログラミング

Python(パイソン)で関数、クラスの作り方ってどうするの?

Pythonの関数の書き方、クラスの使い方について解説!

「Pythonの関数ってどう書くの?」

「Pythonでクラスってどう作るの?」

Pythonでプログラミングする上で、関数やクラスの扱いは重要になります。

Pythonにおける「関数」は、数学の関数と似ていて、「何らかの値を渡すと、その値に応じた何らかの値を返すもの」

また、ざっくりですが「クラス」とは、「オブジェクトを作成するための設計図」になります。

※オブジェクト:「Pythonで書いたプログラムが操作したり、処理したりするデータ」

以下、Jupyter notebook(ジュピターノートブック)を使って実際にPythonのコードを書いていきます。

まだPythonの環境を構築していない方はこちらの記事をお読みください。

関連記事Python(パイソン)環境をAnaconda(アナコンダ)で構築!Jupyter notebookの使い方は?

では、さっそくPythonの関数の書き方、使い方について学んでいきましょう!

Pythonの関数ってどう書くの?

Pythonの関数を書く前に、そもそも関数とは・・・

関数とは、入力された値に対して、指定した内容の計算を行い、入力された値に応じた処理結果を返すものです。

例えば、足し算関数を作りたい場合は下記のようになります。

  • 引数1:3
  • 引数2:5
  • 足し算関数:3+5=8
  • 返り値:8

引数(ひきすう)とは、数学における関数やコンピュータプログラムにおける手続きにおいて、その外部と値をやりとりするための特別な変数、あるいはその変数の値のこと。

返り値(戻り値)とは、プログラム中で呼び出された関数やメソッド、サブルーチンなどが処理を終了する際に、呼び出し元に対して渡す値のこと。

・・・と言っても何だか小難しいですよね。

かんたんに言うと・・・

ヨシタカ
ヨシタカ
関数に入れるのが「引き数」、関数から出てくるのが「返り値(戻り値)」です♪

defaddという関数を定義します。

関数の処理部が、sum = x + y

returnで返り値を与えます。

最後に、print(add(3,5))で関数を呼び出しています。

def add(x,y):
    sum = x + y
    return sum

print(add(3,5))
Python足し算関数

次の例は平均関数。

引数の数だけ値を渡す必要があります。

#3つ引数を受け取って、平均値を返す関数
def average(x1,x2,x3):
    ans = (x1+x2+x3)/3
    return ans

print(average(18,3,15))
Python平均関数

関数に前もって引数を持たせてあげることも出来ます。

#デフォルト引数を持った関数
def average(x1 = 0,x2 = 0,x3 = 0):
    ans = (x1+x2+x3)/3
    return ans

print(average())
print(average(x1= 18,x2= 3,x3 = 15))

何も引数を指定しない時は、デフォルトの引数で処理します。

また、引数名を指定して、関数に値を与えることもできます。

Pythonデフォルト引数
例題

身長と体重を入力して、BMIが出力される関数を作りましょう。

また、BMIが18未満なら「痩せ気味」、18以上25未満なら「普通」、25以上なら「太り気味」と出力させましょう。

以下の引数を使ってみましょう。

yamada = {“height”:2,”weight”:80}

if文を使った条件分岐については、こちらの記事を参考にしてください。

関連記事Python(パイソン)の制御文の使い方は?(if文、for文、while文)

条件式でA「かつ」Bと表現するためにはandを使います。

答え

def BMI_function(height,weight):
    ans = weight/(height*height)
    return ans

yamada = {"height":2,"weight":80}
BMI = BMI_function(yamada["height"],yamada["weight"])
print(BMI)

if BMI<18:
    print("痩せ気味です")
elif BMI >=18 and BMI <=25:
    print("普通です")
else:
    print("太り気味です")
PythonBMI関数

Pythonのクラスってどう作るの?

次は、Pythonのクラスの作り方について学びます。

・・・クラスを勉強する前に。

ヨシタカ
ヨシタカ
そもそもクラスって何?

キーワードがこちら。

  • オブジェクト:具体的な「モノ」のこと全般
  • クラス:「モノ」を生成するための設計図
  • インスタンス:クラスから生成された「モノ」
  • メソッド:クラスに従属する関数
  • フィールド:クラスに従属する変数
  • コンストラクタ:インスタンスが生成されるときに最初に実行されるメソッド(関数)

クラスは「レシピ」でインスタンスは出来上がった「モノ」のイメージです。

大規模なプログラム開発を行うためには、他の人が記述したコードを利用し、それらを組み合わせて目的のプログラムをコーディングしていきます。

クラスは継承することができるので、大規模なプログラム開発で威力を発揮します。

例えば、ハンバーガーの「レシピ」を作り、それをもとにチーズバーガーの「レシピ」を作ることができます。

クラスとインスタンス

以下、Pythonでのクラス・インスタンスの実装例です。

  1. クラスの宣言(class クラス名)
  2. メソッド(関数)の宣言(def 関数名)
  3. クラスに基づきインスタンス(モノ)を生成し名付ける
  4. インスタンスの関数の呼び出し(インスタンス名.関数名)
class test_class: #クラス名の宣言
    def sample(self,a): #メソッド(関数)の宣言
        print("引数:"+ a)
inst=test_class() #クラスに基づきインスタンス(モノ)生成し名前をつける
inst.sample("EXAMPLE") #インスタンスの関数の呼び出し

Jupyter notebookでの実行結果は以下です。

Pythonクラス実装例

クラス内の関数を使うには、まずインスタンス(モノ)を生成【インスタンス名=クラス名()】が必要なので注意です。

コンストラクタとデストラクタ

コンストラクタは、インスタンスが生成されるときに最初に実行されるメソッド(クラスに従属する関数)のことです。

class hamburger:
    def __init__(self):
        print("start loading")
        self.ing =[]
        self.ing.append("bread")
        self.ing.append("meat")
        self.ing.append("onion")
    def add_ing(self):
        self.ing.append("ketchup & mustard")
    def __del__(self):
        print("finish loading")
    def show(self):
        print(self.ing)
    def fetch(self):
        return self.ing
hb=hamburger()
hb.show()
hb.add_ing()
hb.show()
print(hb.fetch())

__init__関数インスタンス生成時に自動的に実行される関数で、これをコンストラクタと言います。

__del__関数クラスがインスタンス消滅時に自動的に実行される関数で、これをデストラクタと言います。

Pythonコンストラクタとデストラクタ

クラスの継承

次は、クラスの継承です。

先にハンバーガーのレシピ(クラス)を作成済みなので、チーズバーガーのレシピを1から書くよりも、ハンバーガーのレシピにチーズを加えて方が早いです。

class 子クラス名(親クラス名):の形式でクラスを宣言することで、親クラスのメソッドが引き継がれた「子クラス」を作成することができます。

これをクラスの継承と言います。

チーズバーガーのレシピ = ハンバーガーのレシピ + チーズ

class hamburger:
    def __init__(self):
        print("start loading")
        self.ing =[]
        self.ing.append("bread")
        self.ing.append("meat")
        self.ing.append("onion")
        self.ing.append("ketchup & mustard")
        
    def show(self):
        print(self.ing)
        
class cheeseburger(hamburger): #hamburgerクラスのメソッドを継承したcheeseburgerクラスを宣言
    def add_cheese(self):
        self.ing.append("cheese") #チーズを追加。これでチーズバーガーのレシピが完成
        
cbg = cheeseburger() #チーズバーガーのマニュアルを元にハンバーガーを生成(インスタンス生成)
cbg.show()
cbg.add_cheese() #作成したハンバーガーにチーズを追加
cbg.show()

Jupyter notebookで実際にPytohnを実行すると以下のようになります。

Pythonクラスの継承

次は、ちょっとした演習問題です。

例題

Aさん~Fさんの6名について出席表(辞書形式)をクラスで実装してみましょう。

  • attendanceというクラス
  • コンストラクタ、attend、showの3つの関数を作成
  • コンストラクタは出席表(メソッド名は”table”)を生成、初期化
  • 出席表初期値は{“A”:False, “B”:False, “C”:False, “D”:False, “F”:False}
  • attend関数:インスタンス名.attend(“A,B,C”)を実行した場合、そのインスタンスの出席表は{“A”:True, “B”:True, “C”:True, “D”:False, “F”:False}となるような関数
  • show関数:”本日の出席表は、{ここに出席表表示}です”を出力
答え

class attendance:
    def __init__(self): #コンストラクタ
        self.table = {"A":False,"B":False,"C":False,"D":False,"E":False,"F":False}
    def attend(self,p):
        attendlist=p.split(",") #split関数は文字列を指定した文字で区切って分割する関数
        for i in attendlist:
            self.table["{}".format(i)]=True
    def show(self):
        print("本日の出席者は{}です。".format(self.table))
        
school = attendance() #インスタンスの生成
school.attend("A,D,E") #本日の出席者を格納
school.show() #本日の出席表を出力

Jupyter notebookで実行するとこんな感じで結果が出ます。

Pythonクラスの演習

実際に色々と自分で試してみてくださいね♪

さあPythonの関数を書いてみよう!

今回は、Pythonの関数の書き方について学びました。

def、引数や返り値(戻り値)により関数を作ることができます。

また、クラスの作り方を学びました。

ヨシタカ
ヨシタカ
ちょっと文法に慣れる必要がありますけどね。

クラスは大規模なプログラムを書く時に便利です。

ぜひ、自分の手で実際に書いてみてくださいね♪

こちらの「スラスラ読める Pythonふりがなプログラミング」もPython初心者の方におすすめです♪

次回はPythonライブラリNumPyを使ってみましょう!

関連記事【NumPy】Python(パイソン)で行列計算!配列関数の使い方を紹介

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です