Python クラスとオブジェクト
1. Pythonはオブジェクト指向言語
Pythonはオブジェクト指向(Object Oriented Programming: OOP)プログラミング言語です。
Pythonにおけるほぼすべての要素は、プロパティ(属性)とメソッド(振る舞い)を持つ「オブジェクト(Object)」として扱われます。
クラス(Class)は、オブジェクトを作成するための「設計図」や「ブループリント」のようなものです。
2. クラスの作成
クラスを作成するには、class キーワードを使用します。
1.1 コード例
x という名前のプロパティを持つ MyClass という名前のクラスを作成します。
class MyClass:
x = 53. オブジェクトの作成
作成したクラスを使用して、オブジェクト(インスタンス)を作成できます。
2.1 コード例
MyClass という名前のオブジェクトを作成し、x の値を出力します。
p1 = MyClass()
print(p1.x)4. init() 関数
クラスの理解において最も重要なのが __init__() 関数です。
すべてのクラスには __init__() という関数が組み込まれており、クラスからオブジェクトが作成される際に自動的に実行されます。
一般的に __init__() 関数は、オブジェクトのプロパティに値を割り当てたり、オブジェクト作成時に必要な初期化(Initialization)処理を行うために使用されます。
3.1 コード例
Person という名前のクラスを作成し、__init__() 関数を使用して name と age に値を割り当てます。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("John", 36)
print(p1.name)
print(p1.age)注意:__init__() 関数は、クラスが新しいオブジェクトを作成するために使用されるたびに、自動的に呼び出されます。
5. str() 関数
__str__() 関数は、クラスのオブジェクトが文字列(String)として表現される際に、どのような内容を返すべきかを制御します。
__str__() 関数が定義されていない場合、オブジェクトの文字列表現はメモリアドレスなどを含むデフォルトの内容になります。
4.1 コード例(str() なし)
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("John", 36)
print(p1) # オブジェクトのメモリアドレス等が表示される4.2 コード例(str() あり)
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name}({self.age})"
p1 = Person("John", 36)
print(p1) # "John(36)" と表示される6. オブジェクトメソッド (Object Methods)
オブジェクトは、メソッド(Methods)を持つことができます。オブジェクトにおけるメソッドとは、そのオブジェクトに属する関数のことです。
Person クラスに、挨拶を出力するメソッドを作成してみましょう。
5.1 コード例
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def myfunc(self):
print("こんにちは、私の名前は " + self.name + " です")
p1 = Person("John", 36)
p1.myfunc() 注意:self パラメータは、クラスの現在のインスタンスへの参照であり、クラスに属する変数にアクセスするために使用されます。
7. self パラメータ
self パラメータは、クラスの現在のインスタンスへの参照であり、クラスに属する変数にアクセスするために使用されます。
この名前を self と呼ぶ必要はなく、好きな名前を付けることができますが、Pythonの慣習として(また他のエンジニアが読みやすくするために)常に self を使用することが強く推奨されます。また、このパラメータはクラス内のすべての関数の 第1引数 である必要があります。
6.1 コード例
self の代わりに mysillyobject や abc を使用した例(動作はしますが推奨されません)。
class Person:
def __init__(mysillyobject, name, age):
mysillyobject.name = name
mysillyobject.age = age
def myfunc(abc):
print("こんにちは、私の名前は " + abc.name + " です")
p1 = Person("John", 36)
p1.myfunc()8. オブジェクトプロパティの修正
オブジェクトのプロパティ(属性)の値は、後から変更することが可能です。
7.1 コード例
p1 オブジェクトの年齢を 40 に設定します。
p1.age = 409. オブジェクトプロパティの削除
del キーワードを使用して、オブジェクトのプロパティを削除できます。
8.1 コード例
p1 オブジェクトから age プロパティを削除します。
del p1.age10. オブジェクトの削除
del キーワードを使用して、オブジェクトそのものを削除することもできます。
9.1 コード例
p1 オブジェクトを削除します。
del p111. pass ステートメント
クラスの定義は空にすることはできませんが、何らかの理由で内容のないクラス定義が必要な場合は、pass ステートメントを記述してエラーを回避します。
10.1 コード例
class Person:
pass