LoginSignup
0
3

More than 3 years have passed since last update.

【python】オブジェクト指向プログラミング基礎vol.2 ~オブジェクトとクラス~

Last updated at Posted at 2019-08-15

オブジェクト指向の勉強の続きです

クラス

オブジェクト指向において最も基本的な仕組みで、管理対象となる情報(変数)と振る舞い(関数)を定義したテンプレートのこと。

クラスの機能として、「カプセル化」と「インスタンス(オブジェクトの生成)」がある。

カプセル化

変数と関数をまとめた上で、外部に公開する情報を制限する機能のこと

複数の変数と関数をまとめて一つのクラスにすることで、プログラムを整理整頓することができる

例:体重と身長を渡すとBMIと適正体重を求める関数

proper = 22

def cal_bmi(weight, height):
    return weight / height ** 2

def cal_proper_weight(height):
    return height ** 2 * proper

properというグローバル変数が使われてしまっている。

クラスを使うと以下のようになります。

class Calculation:
    proper = 22

    def bmi(self, weight, height):
        return weight / height ** 2

    def proper_weight(self, height):
        return height ** 2 * Calculation.proper  

変数と関数をまとめることができる。

クラスが持つ変数をクラス変数(属性)、クラスが持つ関数をメソッドという名前で呼ぶ

上の例だとCalculationクラスはクラス変数properとbmiメソッド、proper_weightメソッドを持つクラスであるといえる。

クラスの定義

クラスをつくるイメージ
クラスイメージ.png
この例では、左記で表現されているものを抽象化してクラスとして定義している。共通している属性をまとめてグルーピングして、そのグルーピングに対して名称をつける。

クラスの作り方

  • classキーワードの後ろにクラス名を記述し、右にコロン(:)をつける
  • 慣例として最初の文字は大文字
  • 変数はインデントして宣言
class Player:
    name = ''
    position = ''
    attack = 0
    defense = 0
    technique = 0
    skill = ''

オブジェクトをつくる構文

  • クラス名()でオブジェクトをつくることができる
  • オブジェクトを生成することを初期化(イニシャライズ)と言う
  • クラスの情報を引き継いで生成されたオブジェクトのことをインスタンスという
christefan = Player()
christefan.name = 'クリステファン・ローディ'
christefan.position = 'FW'
christefan.attack = 409
christefan.defense = 193
christefan.technique = 395
christefan.skill = '天衣無縫'
print(christefan.name, christefan.position, christefan.attack, christefan.skill)

delby = Player()
delby.name = 'デルビー・ベルコム'
delby.position = 'OMF'
delby.attack = 326
delby.defense = 259
delby.technique = 368
delby.skill = '銀河の象徴'

実行結果

クリステファン・ローディ FW 409 天衣無縫

オブジェクトとクラス

オブジェクトはクラスをもとにつくられたものものであり、Pythonのすべての値は、オブジェクトである。クラスはオブジェクトをつくる設計図で、オブジェクトはクラスからつくる。

オブジェクトとクラス.png

クラスの種類を表すために、(type)という言葉を使う。たとえば、文字列のクラスstrはstr型に、整数のクラスintはint型になる。

クラスもまたオブジェクトであり、作成したPlayerもまたオブジェクトである。クラスというオブジェクトの型(type)はtype(型)で、type(Player)は、typeになる。

typeを使うと、クラスも作成できる。このクラスは、classで作成したものと同じオブジェクトで、typeクラスのオブジェクトである。

Player = type('Player')

christefan.name = 'クリステファン・ローディ'
christefan.position = 'FW'
christefan.attack = 409
christefan.defense = 193
christefan.technique = 395
christefan.skill = '天衣無縫'
print(christefan.name, christefan.position, christefan.attack, christefan.skill)
print(type(Player))

実行結果

クリステファン・ローディ FW 409 天衣無縫
<class 'type'>
  • クラス(class) : 管理対象となる情報と振る舞いを定義したテンプレートのこと
  • インスタンス(instance) : クラスの情報をすべて受け継いで生成されたオブジェクトのこと
0
3
8

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
3