クラスについて
以前、データ型について解説しましたが、Pythonでは新しい型を作成することができます。
新しい型の設計書がクラスです。
クラスはデータと処理から構成されています。
そして、クラスをもとに作成された実体をオブジェクトと呼びます。
Pythonにおけるクラスの文法
クラス定義
クラスの定義は下記の文法です。
クラスには処理を定義することができます。
このクラスに定義された処理のことをメソッドといいます。
# クラスの定義
class クラス名:
def メソッド名(self):
処理
...
実際の例は下記のとおりです。
# クラスの定義
class Cat:
def meow(self):
print("にゃー")
インスタンス
定義されたクラスをもとに実体を作成することができます。
この実体のことをインスタンスといいます。
クラスを定義し、インスタンス化、メソッド呼び出しを行う文法は下記です
# クラスの定義
class クラス名:
def メソッド名(self):
処理
...
# クラスのインスタンス化
変数名 = クラス名()
# メソッド呼び出し
変数名.メソッド名()
下記は定義したクラスをインスタンス化、メソッド呼び出しを行う例です。
# クラスの定義
class Cat:
def meow(self):
print("にゃー")
# クラスのインスタンス化
cat1 = Cat()
# メソッド呼び出し
cat1.meow()
インスタンス変数
インスタンスには変数を設定できます。この変数をインスタンス変数と呼びます
インスタンス名.インスタンス変数名 = 値
インスタンス変数は「self.変数名」でクラス内から参照することができます
class クラス名:
def メソッド名(self):
「self.変数名」で参照できる
インスタンス名.インスタンス変数名 = 値
以下、インスタンス変数の設定、参照の例です。
# クラスの定義
class Cat:
def meow(self):
print("にゃー")
def show_name(self):
print("この猫の名前は"+self.name+"です")
# クラスのインスタンス化
cat1 = Cat()
# インスタンス変数を設定
cat1.name = "タマ"
# メソッド呼び出し
cat1.show_name()
# クラスのインスタンス化
cat2 = Cat()
# インスタンス変数を設定
cat2.name = "ミケ"
# メソッド呼び出し
cat2.show_name()
# この猫の名前はタマです
# この猫の名前はミケです
# と出力される
コンストラクタ
インスタンスを作成する際に処理を実行させることができます。
インスタンス作成の際に実行される処理を記載するメソッドをコンストラクタと呼びます
class クラス名:
def __init__(self, 変数名):
処理
...
# クラスの定義
class Cat:
def __init__(self, name):
self.name = name
def show_name(self):
print("この猫の名前は"+self.name+"です")
# クラスのインスタンス化
cat1 = Cat("タマ")
# メソッド呼び出し
cat1.show_name()
# クラスのインスタンス化
cat2 = Cat("ミケ")
# メソッド呼び出し
cat2.show_name()
アクセス制限
変数名の先頭に「__」を付けるとクラス内のメソッドしか参照できなくなります
# クラスの定義
class Cat:
def __init__(self, name):
self.__name = name
def show_name(self):
print("この猫の名前は"+self.__name+"です")
# クラスのインスタンス化
cat1 = Cat("タマ")
# メソッド呼び出し
cat1.show_name()
print(cat1.__name) # エラーになる
継承
# クラスの定義
class Animal:
def __init__(self, name):
self.__name = name
def show_name(self):
print("名前は"+self.__name+"です")
class Cat(Animal):
def make_a_sound(self):
print("にゃー")
class Dog(Animal):
def make_a_sound(self):
print("わん")
# クラスのインスタンス化
animal1 = Cat("タマ")
# メソッド呼び出し
animal1.show_name()
animal1.make_a_sound()
animal2 = Dog("ポチ")
# メソッド呼び出し
animal2.show_name()
animal2.make_a_sound()
# クラスの定義
class Animal:
def __init__(self, name):
self.__name = name
def show_name(self):
print("名前は"+self.__name+"です")
def make_a_sound():
pass
class Cat(Animal):
def make_a_sound(self):
print("にゃー")
class Dog(Animal):
def make_a_sound(self):
print("わん")
# クラスのインスタンス化
animal1 = Cat("タマ")
# メソッド呼び出し
animal1.show_name()
animal1.make_a_sound()
animal2 = Dog("ポチ")
# メソッド呼び出し
animal2.show_name()
animal2.make_a_sound()