オブジェクト指向 1

変数と関数をひとまとめにしたインスタンスというものを作るプログラミングの手法です。

オブジェクト指向プログラミングでは、以下の手順でプログラムを組み立てていきます。

  1. インスタンスの仕様(どんな変数や関数を持っているか)を定義する
  2. 定義された仕様からインスタンスを生成する
  3. 生成されたインスタンスを操作する

またこの 1. で定義されたオブジェクトの仕様のことを、「クラス」と呼びます。

例えば下図は、たい焼という鋳型(クラス、仕様)から、 実際のたい焼き(インスタンス)を生成する図です。

画像のリンク元はこちら

前置き

この章ではオブジェクト指向のざっくりした説明と書き方について説明します。 「オブジェクト指向で書くと何が嬉しいかについては」今後書く予定です。(2020/05/29 時点で未完成)

クラス

クラスとは、インスタンスの仕様です。 具体的にはクラスから生成される、インスタンスがどんな変数や関数を持っているかについて、定義するものです。

class Human:
    pass

インスタンス

クラスから生み出されるオブジェクトのことをインスタンスと呼びます。

# クラスの例
class Human:
    pass

# taroはHumanクラスのインスタンス
taro = Human()

メソッド

インスタンスが持つ関数のことを、 メソッドと呼びます。

メソッドの第一引数には、自身を表すselfが入ります。

# クラスの例
class Human:
    # メソッド
    def greet(self, name):
        print(name + 'さん!こんにちは!')

    # メソッド
    def get_message(self, name):
        return name + 'だよ〜〜〜!!!!'


# インスタンスを生成
taro = Human()

# メソッドを呼ぶ
# => 太郎さん!こんにちは!
taro.greet('太郎')

# メソッドを呼ぶ
# => 太郎だよ〜〜〜!!!!
message = taro.get_message('太郎')
print(message)

インスタンス変数

インスタンスが持つ変数のことを、 インスタンス変数と呼びます。

# クラスの例
class Human:
    def set_name(self, name):
        # self.name はインスタンス変数
        self.name = name

    def greet(self):
        # self.name はインスタンス変数
        print(self.name + 'です!こんにちは!')

# インスタンスを生成
taro = Human()

# メソッドを呼ぶ
taro.set_name('太郎')

# インスタンス変数にアクセス
# => 太郎
print(taro.name)

# メソッドを呼ぶ
# => 太郎です!こんにちは!
taro.greet()

# インスタンス変数を書き換える
taro.name = 'taro'

# インスタンス変数にアクセス
# => taro
print(taro.name)

# メソッドを呼ぶ
# => taroです!こんにちは!
taro.greet()

演習 1

Dog クラスというクラスが作られている。

クラスの定義を行うコードに続いて、 以下のプログラムを書いて下さい。

  1. Dogクラスからインスタンスを生成する
  2. インスタンス変数 nameラテ を入れる
  3. メソッド greet を呼び出す
# クラスが定義されている
class Dog:
    def greet(self):
        print('僕の名前は' + self.name + 'だワン!')


# インスタンスを生成


# インスタンス変数nameに、
# 'ラテ'を代入


# インスタンスの持つメソッド`greet`を呼び出す

演習 2

Catというクラスを作り、インスタンス変数 weight が 3.6 以上なら「普通やで」を、 それ以外なら「飯を増やせ」を表示するメソッド say_self_condition を作成して下さい。

またインスタンス変数 weight に 3.9 、3.5 を代入し、 それぞれの代入の直後に say_self_condition を呼び出て、結果を見て下さい。

# ここにCat クラスを作る


# Catクラスのインスタンスを生成する


# インスタンスのインスタンス変数 weight に 3.9 を代入する


# インスタンスのメソッド say_self_condition を実行する


# インスタンスのインスタンス変数 weight に 3.5 を代入する


# インスタンスのメソッド say_self_condition を実行する