Pythonのクラスの仕組みとサンプルです。
確認環境 ・Python 3 |
目次
説明 | クラスとは |
クラスからオブジェクト(インスタンス)を生成する例 | |
クラスメソッドとクラス変数(インスタンスを生成しない例) |
クラスとは
class クラス名 : フィールド def メソッド名() } |
- クラスは、データ(フィールド)と処理(メソッド)を定義できます。
- クラスは設計図や型枠のイメージです。
- メソッドは、メソッド名の前にdefをつけます。
- 以下はPythonの公式ドキュメントの「9. クラス」のリンクです。
https://docs.python.org/ja/3/tutorial/classes.html
クラスのサンプルです。
# coding: utf-8
class Color:
moji = "色は"
name = ""
def getName(self):
return self.moji + self.name
def setName(self,a):
self.name = a
3~11行目までがColorというクラスです。
3行目は、クラス名です。最初を大文字にします。
4,5行目は、クラスの変数です。フィールドとも呼びます。
7,10行目は、クラスのメソッドです。最初にdefを付けます。
メソッドの引数は、最初にselfを付けます。
11行目は、引数の値をクラスのフィールドにセットしています。
クラスからオブジェクト(インスタンス)を生成する例
変数 = クラス名() //クラスからインスタンスを生成 |
クラスを利用する場合、クラスからオブジェクトを生成する場合と生成しない場合があります。
クラス名()を変数に代入する形でオブジェクト(インスタンス)を生成します。インスタンス化といいます。
上記の図はクラスからオブジェクト(インスタンス)を3つ生成したときのイメージです。
オブジェクトごとにデータを管理できます。
例えると、クラスは設計図、型枠でインスタンスは実体です。
クラスからオブジェクト(インスタンス)を生成するサンプルです。
# coding: utf-8
class Color:
moji = "色は"
name = ""
def getName(self):
return self.moji + self.name
def setName(self,a):
self.name = a
c1 = Color()
c2 = Color()
c3 = Color()
c1.setName("赤")
c2.setName("黄")
c3.setName("青")
print(c1.getName()) # 色は赤
print(c2.getName()) # 色は黄
print(c3.getName()) # 色は青
3~11行目は、クラスです。
13~15行目は、Colorクラスのインスタンスを3つ生成しています。
c1,c2,c3は変数です。
17~19行目は、メソッドを使用してインスタンスに値をセットしています。
ポイントは、インスタンスごとに保持するデータが異なる点です。
21~23行目は、メソッドを使用してインスタンスの値を表示しています。
構文は、変数.メソッド名です。
クラスメソッドとクラス変数(インスタンスを生成しない例)
クラスメソッドとクラス変数は、インスタンスを生成しないで利用できます。
# coding: utf-8
class Color:
cnt = "123" # クラス変数
@classmethod
def getName(self): # クラスメソッド
return "456"
print(Color.getName()) # 456
c1 = Color()
c1.cnt = "999"
print(c1.cnt) # 999
print(Color.cnt) # 123
3~8行目は、Colorというクラスです。
4行目は、変数です。
6行目は、@classmethodがあるので、7行目はクラスメソッドになります。
クラスメソッドとはインスタンス化しなくても使用できるメソッドのことです。
10行目は、newでオブジェクトを生成していませんがColorクラスのメソッドを実行できます。
構文はクラス名.変数名です。
12~14行目は比較のためにインスンスを生成し値を表示しています。
13行目は、インスタンスに値をセットし14行目でその値を表示しています。
16行目は、オブジェクトを生成していませんがColorクラスの変数を参照できます。
構文はクラス名.変数名です。
クラス変数と呼ばれます。
関連の記事