1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

超初心者向け Pythonコードの書き方 パイソンの基礎を学ぶ 4

Last updated at Posted at 2023-04-16

クラスとインスタンス

クラスの定義

プログラミングでメニューというものを生成するには、まずその設計図を用意する必要がある。
設計図のことをクラスもののことをインスタンスと呼ぶ。
インスタンスを生成する流れは、❶クラスを用意する ❷クラスからインスタンスを生成する ❸インスタンスに情報を追加する

01. クラスを用意する

クラスはclass クラス名:とすることで定義できる。
また、クラス名はMenuItemのように大文字で始める。

class MenuItem:

クラスの中身(設計図の内容)はclass MenuItem:より後の行で、インデントをして書く。
これは何も処理がない場合は、passと書く。

class MenuItem:
    pass

インスタンスの生成

02. クラスからインスタンスを生成する

クラス名()でそのクラスを呼び出すことで、クラス(設計図)を用いて新しくインスタンスを生成することができる。
変数名 = クラス名()とすることで、生成したインスタンスを変数に代入することができる。

class MenuItem:
    pass

menu_item1 = MenuItem()

インスタンス変数

03. インスタンスに情報を追加する

それぞれのインスタンス(メニュー)には、自由に様々な情報を追加することができる。
menu_item1.name = 'サンドイッチ'とすることで、menu_item1nameサンドイッチであるという情報を追加することができる。このnameのことをインスタンス変数と呼ぶ。

class MenuItem:
    pass

menu_item1 = MenuItem()
menu_item1.name = 'サンドイッチ'

インスタンス.インスタンス変数名とすることで、そのインスタンス変数の値を用いることができる。

class MenuItem:
    pass

menu_item1 = MenuItem()
menu_item1.name = 'サンドイッチ'
print(menu_ietm1.name)
出力結果
サンドイッチ

複数のインスタンス

class MenuItem:
    pass

menu_item1 = MenuItem()
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500
print(menu_ietm1.name)
print(menu_item1.price)

menu_item1 = MenuItem()
menu_item1.name = 'チョコケーキ'
menu_item1.price = 400
print(menu_ietm1.name)
print(menu_item1.price)


出力結果
サンドイッチ
500
チョコケーキ
400

インスタンスメソッド

クラスとメソッド

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

class MenuItem:
    def hello(self)
        print('こんにちは!')

クラスの中で定義したメソッドは、インスタンスに対して使うように呼び出す。インスタンス.メソッド名()とすることで、メソッドを呼び出す。

class MenuItem:
    def hello(self):
        print('こんにちは!')

menu_item1 = MenuItem()
menu_item1.hello()
出力結果
こんにちは!

インスタンスメソッド(self)

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

class MenuItem:
    def info(self):
        print(self.name)

menu_item1 = MenuItem()
menu_item1.name = 'サンドイッチ'
menu_item1.info()
出力結果
サンドイッチ

namepriceの値を用いて、「サンドイッチ: ¥500」と出力する時、priceの値は数値型であるため、文字列と結合するためには文字列型に変換する必要がある。

class MenuItem:
    def info(self):
        print(self.name + ': ¥' + str(self.price))


menu_item1 = MenuItem()
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500

menu_item1.info()

menu_item2 = MenuItem()
menu_item2.name = 'チョコケーキ'
menu_item2.price = 400

menu_item2.info()
出力結果
サンドイッチ: ¥500
チョコケーキ: ¥400

インスタンスメソッド(戻り値)

インスタンスメソッドは通常の関数と同様に、戻り値を返すようにすることもできる。

class MenuItem:
    def info(self):
        return self.name + ': ¥' + str(self.price)


menu_item1 = MenuItem()
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500

print(menu_item1.info())

menu_item2 = MenuItem()
menu_item2.name = 'チョコケーキ'
menu_item2.price = 400

print(menu_item2.info())
出力結果
サンドイッチ: ¥500
チョコケーキ: ¥400

インスタンスメソッド(引数)

インスタンスメソッドに引数を渡す場合、メソッドの定義側ではselfの分だけ引数の順番がずれる。

class MenuItem:
    def info(self):
        return self.name + ': ¥' + str(self.price)

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


menu_item1 = MenuItem()
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500

print(menu_item1.info())

result = menu_item1.get_total_price(4)

print('合計は' + str(result) + '円です')
出力結果
サンドイッチ: ¥500
合計は2000円です

__init__メソッド(1)
__init__メソッド(2)
__init__メソッド(3)

編集中です。

1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?