yoshiislandblog.net
元営業の駆け出しアラサーSEが、休日にMACと戯れた際の殴り書きメモ。日々勉強。日々進歩。

この記事は3年以上前に書かれた記事で内容が古い可能性があります

PythonのClassとConstractorとMethodをざっくり理解する

2019-12-07

PythonのClassとConstractorとMethodをざっくり理解する

※Python3.5.0前提で記載

  1. 用語整理
  2. 白紙のClass(設計書)を用意する
  3. Class(設計書)の中身を書いていく
  4. Class(設計書)からもの(Instance)を作って動かす
  5. 実行結果
  6. 参考リンク

用語整理

  • Class(クラス):設計書
  • Constractor(コンストラクター):Classが作られるときに最初に実行されるやつ
  • Method(メソッド):Classの機能

白紙のClass(設計書)を用意する

ここからは実際にClassとやらを用意する

Classの枠はこれだけ
今回は「Human」というClassにした

class Human():
    #  なんか色々ここに設計書の内容を書く

Class(設計書)の中身を書いていく

白紙設計書では意味がないので、この中に色々内容を書いていく
Classの中には、いくつか機能(Method)が書かれている
Methodは「def」という接頭語?で記載する
今回は「Human」クラスに、「laugh」と「walk」という機能を用意した

class Human():

    # Constractor
    def __init__(self):
        #  Humanを作ったら絶対最初に実行することを書く
        
    # Method
    def laugh(self):
        #  laughの機能の内容を書く
        
    # Method
    def walk(self):
        #  walkの機能の内容を書く

init」という名前のMethodは、Classが作られた絶対実行されること。
これは、特別に「Constractor」と呼ばれる
変数の定義などがよく書かれる

何でinitなの?とかはよくわからん、そう決まってる(雑)

その他の任意の名前で書かれているMethod(例えば上の例では「laugh」と「walk」) は、
呼び出されたら使われる機能

「def」から始まる塊について「class」の外で使われたいたら
「function(関数)」と呼ばれる。紛らわしい、、、

参考:pythonの中でよくみる「def」から始まる塊について、用語が紛らわしいので整理する

設計書の全容は以下

class Human():
    # ----------------------------------
    # Constractor(__init__): 「Human」というClassが呼ばれたら絶対最初に実行される
    def __init__(self, name, gender, age, tall ,weight):

        # 初期値(self)を設定する
        self.name = name
        self.gender = gender # male, female
        self.age = age
        self.tall = tall # mater
        self.weight = weight #kg

        # その他絶対実行する処理
        print("=========")
        print("hi, I'm %s." % self.name)
    # ----------------------------------

    # ----------------------------------
    # Method: 『Human」の機能。「laugh」
    def laugh(self):
        if self.gender == "male": # 男なら「hahaha」と笑う
            print("hahaha")
        elif self.gender == "female": # 女なら「hohoho」と笑う
            print("hohoho")
        else: # 男でも女でもなければ「hehehe」と笑う
            print("hehehe")
    # ----------------------------------

    # ----------------------------------
    # Method: 「Human」の機能。「walk」
    def walk(self):
        bmi = self.weight / (self.tall * self.tall) # BMI値を計算
        if bmi > 25: # BMIが25以上なら「I'm Tired,,,」
            print("I'm Tired,,,")
        else: # それ以外(BMIが25未満)なら「walk walk!」
            print("walk walk!")
    # ----------------------------------

Class(設計書)からもの(Instance)を作って動かす

設計書が書けたので、設計書から「もの」を作って、機能を使ってみる
できたものを「Instance(インスタンス)」と呼ぶ

何もなければ、Humanクラスはこれだけで作成できる

Human()

ただ今回は、色々パラメータを使う前提で「Class」を書いているので、こんな感じで作成する

Human("Taro", "male", 30, 1.7, 65)

パラメータを使う前提で、、というのはこの部分のこと

    def __init__(self, name, gender, age, tall ,weight):

更に、「Human」Classから作成したオプジェクト(以下の例では「taro」 と定義)から各機能を使うには、
「taro.【機能名】」と記載する

こんな感じ

taro = Human("Taro", "male", 30, 1.7, 65) # 「Human」Class(設計書)から「taro」さんを作成
taro.laugh() # 作成した「taro」の「laugh」機能を使う
taro.walk() # 作成した「taro」の「walk」機能を使う

実行結果

今回Classを作成して実行したコード全容は以下

#!/usr/bin/env python
# coding: utf-8

# ======================================
# ここから「Human」というClass(設計書)
class Human():

    # ----------------------------------
    # Constractor(__init__): 「Human」というClassが呼ばれたら絶対最初に実行される
    def __init__(self, name, gender, age, tall ,weight):

        # 初期値(self)を設定する
        self.name = name
        self.gender = gender # male, female
        self.age = age
        self.tall = tall # mater
        self.weight = weight #kg

        # その他絶対実行する処理
        print("=========")
        print("hi, I'm %s." % self.name)
    # ----------------------------------

    # ----------------------------------
    # Method: 『Human」の機能。「laugh」
    def laugh(self):
        if self.gender == "male": # 男なら「hahaha」と笑う
            print("hahaha")
        elif self.gender == "female": # 女なら「hohoho」と笑う
            print("hohoho")
        else: # 男でも女でもなければ「hehehe」と笑う
            print("hehehe")
    # ----------------------------------

    # ----------------------------------
    # Method: 「Human」の機能。「walk」
    def walk(self):
        bmi = self.weight / (self.tall * self.tall) # BMI値を計算
        if bmi > 25: # BMIが25以上なら「I'm Tired,,,」
            print("I'm Tired,,,")
        else: # それ以外(BMIが25未満)なら「walk walk!」
            print("walk walk!")
    # ----------------------------------

# ここまで「Human」というClass(設計書)
# ======================================



# ======================================
# ここからClass(設計書)を元にHumanを作って動かす

# --------------------------------------
taro = Human("Taro", "male", 30, 1.7, 65) # 「Human」Class(設計書)から「taro」さんを作成
taro.laugh() # 作成した「taro」の「laugh」機能を使う
taro.walk() # 作成した「taro」の「walk」機能を使う
# --------------------------------------

# --------------------------------------
hanako = Human("Hanako", "female", 70, 1.5, 60) # 「Human」Class(設計書)から「hanako」さんを作成
hanako.laugh() # 作成した「hanako」の「laugh」機能を使う
hanako.walk() # 作成した「hanako」の「walk」機能を使う
# --------------------------------------

# --------------------------------------
cat = Human("Cat", "other", 5, 0.5, 5) # 「Human」Class(設計書)から「cat」さんを作成
cat.laugh() # 作成した「cat」の「laugh」機能を使う
cat.walk() # 作成した「cat」の「walk」機能を使う
# --------------------------------------

実行結果はこうなる

% python test.py
=========
hi, I'm Taro.
hahaha
walk walk!
=========
hi, I'm Hanako.
hohoho
I'm Tired,,,
=========
hi, I'm Cat.
hehehe
walk walk!

参考リンク

  • メソッド・def・インスタンスってなに?
  • pythonの中でよくみる「def」から始まる塊について、用語が紛らわしいので整理する