この記事は3年以上前に書かれた記事で内容が古い可能性があります
PythonのClassとConstractorとMethodをざっくり理解する
PythonのClassとConstractorとMethodをざっくり理解する
※Python3.5.0前提で記載
用語整理
- 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!