Python クラスとオブジェクト

Note: Pythonはオブジェクト指向プログラミング言語です。

Python クラス/オブジェクト

Pythonではほとんどすべてがオブジェクトであり、それぞれがプロパティとメソッドを持っています。

クラスはオブジェクトのコンストラクタのようなものであり、「オブジェクトを作成するための設計図」です。

クラスの作成

クラスを作成するには、キーワード class を使用します:

class MyClass:
  x = 5

オブジェクトの作成

今度は、MyClass というクラスを使用してオブジェクトを作成できます:

p1 = MyClass()
print(p1.x)

__init__() 関数

上記の例はクラスとオブジェクトの基本的な形であり、実際のアプリケーションではあまり役立ちません。

クラスの意味を理解するには、組み込みの __init__() 関数を理解する必要があります。

すべてのクラスには、クラスが初期化されるときに常に実行される __init__() 関数があります。

__init__() 関数を使用して、オブジェクトのプロパティに値を割り当てたり、オブジェクトが作成されるときに必要なその他の操作を行います:

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

p1 = Person("John", 36)

print(p1.name)
print(p1.age)

Note: __init__() 関数は、クラスが新しいオブジェクトを作成するたびに自動的に呼び出されます。

__str__() 関数

__str__() 関数は、クラスオブジェクトが文字列として表現されるときに返す内容を制御します。

__str__() 関数が設定されていない場合、オブジェクトの文字列表現が返されます:

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

p1 = Person("John", 36)

print(p1)

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)

オブジェクトメソッド

オブジェクトはメソッドを含むこともできます。オブジェクト内のメソッドは、オブジェクトに属する関数です。

次に、Person クラスにメソッドを作成します:

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

  def myfunc(self):
    print("Hello my name is " + self.name)

p1 = Person("John", 36)
p1.myfunc()

Note: self パラメータは、クラスの現在のインスタンスへの参照であり、クラスに属する変数にアクセスするために使用されます。

self パラメータ

self パラメータはクラスの現在のインスタンスへの参照であり、クラスに属する変数にアクセスするために使用されます。

これは self という名前でなくても構いませんが、クラス内のすべての関数の最初のパラメータである必要があります:

class Person:
  def __init__(mysillyobject, name, age):
    mysillyobject.name = name
    mysillyobject.age = age

  def myfunc(abc):
    print("Hello my name is " + abc.name)

p1 = Person("John", 36)
p1.myfunc()

オブジェクトのプロパティの変更

次のようにしてオブジェクトのプロパティを変更できます:

p1.age = 40

オブジェクトのプロパティの削除

del キーワードを使用してオブジェクトのプロパティを削除できます:

del p1.age

オブジェクトの削除

del キーワードを使用してオブジェクトを削除できます:

del p1

pass ステートメント

クラス定義は空にすることはできませんが、何らかの理由で内容のないクラス定義がある場合は、エラーを避けるために pass ステートメントを挿入します。

class Person:
  pass