Pythonのクラス定義、継承、モジュールの読み込みなど、クラスに関連する主要なコマンドや用語についてまとめています。
クラスの定義
class クラス名:
└ 大文字で始める
└ 区切りも大文字が使える(キャメル)
└ ( )不要
class Item:
#大文字区切りもOK
class ItemList:
インスタンスの生成
クラス名()
└ 引数は__init__で設定した引数に合わせる
└ 基本的に変数に代入する
class Item:
pass
#インスタンスの生成
item1 = Item()
インスタンス変数
インスタンス毎にセットする値。
小文字で記述。複数単語から成る場合はアンダースコア( _ )でつなぐ
インスタンス変数のセットインスタンス.インスタンス変数名 = セットする値
インスタンス変数の取得インスタンス.インスタンス変数名
#クラス定義
class Item:
pass
#インスタンス生成
item1 = Item()
#インスタンス変数のセット
item1.name = 'sord';
item1.price = 5000;
item1.special_skill = 'high';
#インスタンス変数の呼び出し
print(item1.name)
print(item1.price)
print(item1.special_skill)
#出力
sord
5000
high
__init__メソッド
インスタンスを生成したときに、自動で実行されるメソッド。
初期値のセットなどに使う。
def __init__(self, 引数1, 引数2,,,):
└ self必須
└ self=インスタンス自身
__init__メソッドを呼び出したインスタンス自身が自動的にselfに入る。
class Message:
def __init__(self):
print('インスタンスを生成しました')
▼引数ありの場合
(例)インスタンス変数名「name」を作り、引数で渡された値をセット。
class Item:
def __init__(self, name):
self.name = name
__init__メソッドを使ってインスタンスを生成
class Item:
def __init__(self, name, price, special_skill):
self.name = name
self.price = price
self.special_skill = special_skill
item1 = Item('sord', 5000, 'high')
print(item1.name)
print(item1.price)
print(item1.special_skill)
#出力
sord
5000
high
メソッドの作成と呼び出し
クラス内で定義した関数をメソッドと呼ぶ。
メソッドの作成def メソッド名(self, 引数,,,):
└ self必須
└ メソッド名は小文字(とアンダースコア)
メソッドの呼び出しインスタンス.メソッド名(引数,,,):
└ 「インスタンス.」が必須
class User:
def __init__(self, name):
self.name = name
#メソッド作成
def init_message(self):
print('インスタンスを生成しました')
def hello(self, prefecture):
print(f'こんにちは{prefecture}の{self.name}さん。')
user1 = User('TODOROKI')
#メソッド呼び出し
user1.init_message()
user1.hello('tokyo')
#出力
インスタンスを生成しました
こんにちはtokyoのTODOROKIさん。
・引数はself必須。ないとエラー
・メソッドを呼び出すときは、どのインスタンスか指定が必要。
クラスの継承
class クラス名(親クラス名):
└ 大文字で始める
└ 区切りも大文字が使える(キャメル)
class User:
def __init__(self, name):
self.name = name
def init_message(self):
print('インスタンスを生成しました')
def hello(self, prefecture):
print(f'こんにちは{prefecture}の{self.name}さん。')
#Userクラスを継承
class Persona(User):
pass
#継承したクラスでインスタンス生成
persona1 = Persona('MUSYA')
#継承したクラスでメソッドを呼び出し
persona1.init_message()
persona1.hello('Fukui')
#出力
インスタンスを生成しました
こんにちはFukuiのMUSYAさん。
継承すれば親クラスのメソッドやインスタンス変数がそのまま使える。
オーバーライド
メソッドを上書きすること。
__init__メソッドに新たにインスタンス変数を追加するなど。
#userクラスを定義
class User:
def __init__(self, name, prefecture):
self.name = name
self.prefecture = prefecture
#Userクラスを継承
class Persona(User):
#オーバーライド(__init__メソッドの引数にageを追加)
def __init__(self, name, prefecture, age):
self.name = name
self.prefecture = prefecture
self.age = age
#インスタンスを生成
persona1 = Persona('MUSYA', 'Fukui', '21')
print(f'{persona1.prefecture}の{persona1.name}さんは{persona1.age}歳です。')
#出力
FukuiのMUSYAさんは21歳です。
継承したクラスで親クラスのメソッドを呼び出す
super().メソッド名(引数)
└ super()の引数は不要
└ メソッドの引数に「self」は不要
└ 引数の数、名前をあわせる
class User:
def __init__(self, name, prefecture):
self.name = name
self.prefecture = prefecture
#Userクラスを継承
class Persona(User):
#親クラスのメソッドを呼び出し、オーバーライド
def __init__(self, name, prefecture, age):
super().__init__(name, prefecture)
self.age = age
persona1 = Persona('MUSYA', 'Fukui', '21')
print(f'{persona1.prefecture}の{persona1.name}さんは{persona1.age}歳です。')
#出力
FukuiのMUSYAさんは21歳です。
・記述が少なくなる。
・superはおそらくsupersedeの略(意味:引き継ぐ、後継する)
別ファイルのクラスを読み込む
from モジュール名 import クラス名
└ モジュール名=ファイル名(.py除く)
クラスを直接読み込むためモジュールの指定が不要。
▼user.pyのUserクラスを読み込む
class User:
def __init__(self, name, prefecture):
self.name = name
self.prefecture = prefecture
#別ファイルのクラスを読み込み
from user import User
#Userやそのメソッドが使える
class Persona(User):
def __init__(self, name, prefecture, age):
super().__init__(name,prefecture)
self.age = age
persona1 = Persona('MUSYA', 'Fukui', '21')
persona1.init_message()
persona1.hello()
print(f'{persona1.prefecture}の{persona1.name}さんは{persona1.age}歳です。')
モジュール自体を読み込んだ場合
クラスではなく、モジュール全体を読み込んだ(importした)場合は、クラスの前にモジュール名が必要。
モジュール自体の読み込み
・import モジュール名
継承
・class クラス名(モジュール名.親クラス名)
import user
#クラス名の前にモジュール名をつける
class Persona(user.User):
def __init__(self, name, prefecture, age):
super().__init__(name,prefecture)
self.age = age
persona1 = Persona('MUSYA', 'Fukui', '21')
persona1.init_message()
persona1.hello()
print(f'{persona1.prefecture}の{persona1.name}さんは{persona1.age}歳です。')
以上。