LoginSignup
0
1

More than 3 years have passed since last update.

クラスとインスタンス

Posted at

クラスとインスタンス

プログラミングでものを生成するには、まずそのものの設計図を用意する必要があります。
設計図をクラス、ものをインスタンスと呼びます。
クラスとインスタンスは理解が難しく様々な捉え方があります。
私はたいやきでイメージしており、
クラス:たい焼きの型
インスタンス:たい焼き
と捉えています。

クラスの定義

クラスは「class クラス名:」と記述することで定義できます。
クラス名は「FruitPrice」のように大文字で始めるようにします。

class FruitPrice:
    #処理を記入

インスタンス生成

クラス()と記述してクラスを呼び出すことで、クラスを用いて新しくインスタンスを生成することができます。
また、「変数名 = クラス名()」と記述することで生成したインスタンスを変数に代入することができます。

class FruitPrice:
    #処理を記入

fruit_price = FruitPrice()

インスタンスにはそれぞれ名前や値段などの情報を追加することができます。
例えば上記では、「fruit_price.name = 'apple'」とすることで、変数fruit_pricenameappleであるという情報を追加することができます。この時、nameのことを「インスタンス変数」と呼びます。

class FruitPrice:
    pass   # passは処理が何もないことを表します

fruit_price = FruitPrice()
fruit_price.name = 'apple'
print(fruit_price.name)
出力結果
apple

メソッド

クラスの中では関数を定義することができます。クラスの中で定義した関数を「メソッド」と呼びます。
メソッドの定義の方法は通常の関数のと同じですが、第1引数にselfを追加する必要があります。

クラスの中で定義したメソッドを呼び出す

呼び出すには「インスタンス.メソッド名()」と記述することで呼び出すことができます。
クラスの中で定義し、インスタンスに対して呼び出すメソッドのことを、「インスタンスメソッド」と呼びます。
例ではhelloがインスタンスメソッドに当たります。

class FruitPrice:
    def hello(self):
        print('おはよう')

fruit_price = FruitPrice()   # インスタンス生成し、変数に代入
fruit_price.hello()   # クラスの中で定義したメソッドを呼び出す
出力結果
おはよう

self

ここでインスタンスメソッドでの第1引数に指定したselfにはそのメソッドを呼び出したインスタンス自身が代入されています。
下図の例では、メソッド内でself.nameとすることで、そのメソッドを呼び出しているfruit_pricenameの値を取得することができます。

class FruitPrice:
    def info(self):   # selfにfruit_priceが代入される
        print(self.name)

fruit_price = FruitPrice()
fruit_price.name = 'apple'
fruit_price.info()   # クラスの中で定義したメソッドを呼び出す
出力結果
apple

ここまで学んだことを用いて、fruitの合計金額の出力を行います

class FruitPrice:
    def info(self):
        return self.name + 'は'+ str(self.price) + '円です'   #self.priceは数値なので文字列に変換する必要があります

    def get_total_price(self, count):
        total_price = self.price * count
        return total_price

fruit_price = FruitPrice()
fruit_price.name = 'apple'
fruit_price.price = 300
print(fruit_price.info())

result = fruit_price.get_total_price(3)
print('合計金額は' + str(result) + '円です')
出力結果
appleは300円です
合計金額は900円です

ここで気をつけるポイントは、インスタンスメソッドに引数を渡す場合、メソッドの定義側ではselfの分だけ引数の順番がずれることです。
fruit_price.get_total_price(3)3get_total_price(self, count)countに代入されます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1