クラス¶
クラスの基本¶
下記のクラスを例に説明します。
class User:
def __init__(self, name: str, age: int) -> None:
self.name = name
self.age = age
def hello(self) -> None:
print(f"こんにちは、私は{self.name}です!")
コンストラクタ¶
コンストラクタは__init__ (1) で定義します。
- Dunder(ダンダー)メソッドの一つです。
class User:
def __init__(self, name: str, age: int) -> None:
self.name = name
self.age = age
def hello(self) -> None:
print(f"こんにちは、私は{self.name}です!")
第一引数のself(1)は必須です。自身のインスタンスオブジェクトが入ります。
- 変数名は
selfでなくとも動作しますが、慣習としてselfを使います。
第二引数以降は任意で、関数同様に任意の引数を定義できます。任意引数も定義できます。
インスタンス変数¶
クラスの変数(プロパティ)は、selfに対して任意の箇所で代入して行います。
class User:
def __init__(self, name: str, age: int) -> None:
self.name = name
self.age = age
def hello(self) -> None:
print(f"こんにちは、私は{self.name}です!")
インスタンス化は、コンストラクタに指定する引数を与えます。
インスタンスのプロパティには.でアクセスできます。
インスタンス変数のスコープ¶
メソッド(インスタンスメソッド)¶
メソッドは第一引数にselfを指定します。
class User:
def __init__(self, name: str, age: int) -> None:
self.name = name
self.age = age
def hello(self) -> None:
print(f"こんにちは、私は{self.name}です!")
メソッドも.で呼び出します。
クラス変数、クラスメソッド¶
以下のクラスを例に解説します。
class User:
instance_count: int = 0
def __init__(self) -> None:
self.instance_count += 1
@classmethod
def print_instance_count(cls) -> str:
print(f"インスタンスの生成数は{cls.instance_count}個です")
クラス変数の定義¶
クラス変数は、クラスの直下に{変数名} = {初期値}の形で定義します。
class User:
instance_count: int = 0
def __init__(self) -> None:
self.instance_count += 1
@classmethod
def print_instance_count(cls) -> str:
print(f"インスタンスの生成数は{cls.instance_count}個です")
クラス変数へのアクセス¶
クラス変数は、インスタンスからアクセスすることができます。値はクラス全体で共有されます。
class User:
instance_count: int = 0
def __init__(self) -> None:
self.instance_count += 1
@classmethod
def print_instance_count(cls) -> str:
print(f"インスタンスの生成数は{cls.instance_count}個です")
クラスから直接アクセスすることもできます。
クラスメソッドの定義¶
クラスメソッドは@classmethodのアノテーションをつけたメソッドとして定義します。
class User:
instance_count: int = 0
def __init__(self) -> None:
self.instance_count += 1
@classmethod
def print_instance_count(cls) -> str:
print(f"インスタンスの生成数は{cls.instance_count}個です")
第一引数のcls(1)は必須です。自身のクラスオブジェクトが入ります。
- 変数名は
clsでなくとも動作しますが、慣習としてclsを使います。
cls.{クラス変数名}でクラス変数にアクセスできます。