Python 速習チュートリアル

Python のクラスメソッド

1. クラスメソッド

メソッドはクラスに属する関数です。これらは、クラスから作成されたオブジェクト(インスタンス)の振る舞い(ビヘイビア)を定義します。

1.1 クラス内でのメソッド作成例

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

  def greet(self):
    print("こんにちは、私の名前は " + self.name)

p1 = Person("エミル")
p1.greet()

注意: すべてのメソッドは、最初の引数として self を受け取る必要があります。

2. 引数を持つメソッド

メソッドは、通常の関数と同様に引数(パラメータ)を受け取ることができます。

2.1 引数を持つメソッドの例

class Calculator:
  def add(self, a, b):
    return a + b

  def multiply(self, a, b):
    return a * b

calc = Calculator()
print(calc.add(5, 3))      # 結果: 8
print(calc.multiply(4, 7)) # 結果: 28

3. プロパティにアクセスするメソッド

メソッドは self を使用して、オブジェクトのプロパティにアクセスしたり、その値を操作したりできます。

3.1 オブジェクトのプロパティを参照する例

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

  def get_info(self):
    return f"{self.name} は {self.age} 歳です"

p1 = Person("トビアス", 28)
print(p1.get_info())

4. プロパティを変更するメソッド

メソッド内でオブジェクトのプロパティ値を書き換えることも可能です。

4.1 プロパティ値を更新する例

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

  def celebrate_birthday(self):
    self.age += 1
    print(f"誕生日おめでとう! あなたは現在 {self.age} 歳です")

p1 = Person("ライナス", 25)
p1.celebrate_birthday()
p1.celebrate_birthday()

5. str() メソッド

__str__() メソッドは、オブジェクトを print() 関数などで出力する際に、どのような文字列を返すかを制御する特別なメソッド(特殊メソッド)です。

5.1 str() メソッドがない場合

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

p1 = Person("エミル", 36)
print(p1) 
# 出力例: <__main__.Person object at 0x...> (メモリ上のアドレスが表示される)

5.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("トビアス", 36)
print(p1) # 出力: トビアス (36)

6. 複数のメソッド

1つのクラス内で、相互に連携する複数のメソッドを定義できます。

6.1 クラス内に複数のメソッドを実装する例

class Playlist:
  def __init__(self, name):
    self.name = name
    self.songs = []

  def add_song(self, song):
    self.songs.append(song)
    print(f"追加済み: {song}")

  def remove_song(self, song):
    if song in self.songs:
      self.songs.remove(song)
      print(f"削除済み: {song}")

  def show_songs(self):
    print(f"プレイリスト '{self.name}':")
    for song in self.songs:
      print(f"- {song}")

my_playlist = Playlist("お気に入り")
my_playlist.add_song("Bohemian Rhapsody")
my_playlist.add_song("Stairway to Heaven")
my_playlist.show_songs()

7. メソッドの削除

del キーワードを使用することで、クラスから特定のメソッドを削除できます。

7.1 クラスからメソッドを削除する例

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

  def greet(self):
    print("こんにちは!")

p1 = Person("エミル")

# クラスから greet メソッドを削除
del Person.greet

# p1.greet() # ここで実行しようとするとエラーが発生します