Pythonのクラス定義では、特別なキーワードとしてself
が使用されます。このキーワードは、クラスのインスタンス自体を参照するために使用されます。
例えば、以下のようなクラスを考えてみましょう。
from __future__ import annotations
from dataclasses import dataclass
@dataclass
class User:
name: str
name_in_lowercase: str
name_in_uppercase: str
age: int
@classmethod
def create(cls, name: str, age: int ) -> User:
return User(name=name, name_in_lowercase=name.lower(), name_in_uppercase=name.upper(), age=age)
def print_description(self):
print(f'name: {self.name}\\nname_in_lowercase: {self.name_in_lowercase}\\nname_in_uppercase: {self.name_in_uppercase}\\nage: {self.age}')
def main():
user = User.create(name="John Titor", age=36)
user.print_description()
if __name__ == "__main__":
main()
このコードでは、User
クラスが定義されており、その中にcreate
というクラスメソッドがあります。このメソッドは、新しいUser
インスタンスを作成し、そのインスタンスを返します。このとき、返り値の型としてUser
を指定していますが、これはself
の一種と考えることができます。
また、print_description
というメソッドでは、self
を使用してインスタンスの属性にアクセスしています。これにより、各インスタンスは自身の状態を知ることができます。
このように、Pythonのクラスと自己参照は、オブジェクト指向プログラミングにおいて重要な概念です。クラスはオブジェクトの設計図であり、インスタンスはその設計に基づいて作成された実際のオブジェクトです。そして、self
はそのインスタンス自体を指す特殊な引数であり、クラス内で定義されたメソッドは、そのメソッドを呼び出すオブジェクト自身への参照を第一引数として取ります。.