Pythonの__init__とfromインポート:クラスをより便利に使う

クラスとメソッドの基本を学んだ後、さらに便利な機能を学びました。インスタンス生成と同時に処理を実行する __init__ と、モジュールから特定のクラスだけを読み込む from import の使い方です。

init:インスタンス生成時に自動実行されるメソッド

__init__(アンダースコア2つ + init + アンダースコア2つ)は、インスタンスを生成した直後に自動的に実行される特別なメソッドです。

__init__なしの場合(これまでの書き方)

class Car:
    def show_info(self):
        print(f"色: {self.color}, 速度: {self.speed}")

my_car = Car()
my_car.color = "blue"   # 生成後に1つずつ設定
my_car.speed = 200      # 生成後に1つずつ設定
my_car.show_info()      # 色: blue, 速度: 200

インスタンスを生成した後、毎回手動でインスタンス変数を設定する必要があります。

__init__ありの場合

class Car:
    def __init__(self, color, speed):
        self.color = color   # 生成と同時に設定される
        self.speed = speed   # 生成と同時に設定される
    
    def show_info(self):
        print(f"色: {self.color}, 速度: {self.speed}")

# インスタンス生成と同時に値を渡せる
my_car = Car("blue", 200)
my_car.show_info()  # 色: blue, 速度: 200

__init__ を使うことで、インスタンスの生成と初期値の設定を1行で完結できます。

__init__のメリット

# __init__があれば、複数のインスタンスも簡潔に生成できる
car1 = Car("blue", 200)
car2 = Car("red", 180)
car3 = Car("black", 220)

コードがスッキリして、インスタンス変数の設定漏れも防げます。

from import:特定のクラスだけ読み込む

これまでの import は、モジュール全体を読み込む方法でした。from import を使うと、モジュール内の特定のクラスだけを直接読み込むことができます。

通常のimportとの違い

# 通常のimport
import car_module
my_car = car_module.Car("blue", 200)  # モジュール名.クラス名が必要

# from import
from car_module import Car
my_car = Car("blue", 200)  # クラス名だけで使える(モジュール名不要)

from import を使うと、クラスをモジュール名なしで直接使えるようになります。

複数のクラスを読み込む場合

# カンマで区切って複数読み込める
from car_module import Car, Truck, Bus

round:小数を四捨五入する

今回の学習で round 関数も学びました。小数を四捨五入して整数を取得できます。

構文: round(数値)

print(round(3.7))   # 4
print(round(2.3))   # 2
print(round(3.5))   # 4(四捨五入)

# 小数点以下の桁数を指定することも可能
print(round(3.14159, 2))  # 3.14(小数点2桁まで)

クラスで計算処理を行うときに、結果を整数に丸めたい場面で役立ちます。

今日の学びのポイント

  • __init__: インスタンス生成直後に自動実行されるメソッド
    • def __init__(self, 引数): で定義
    • 生成と同時にインスタンス変数を初期化できる
  • from モジュール名 import クラス名: 特定のクラスを直接読み込む
    • 読み込み後はモジュール名なしで使える
  • round(): 小数を四捨五入して整数を取得

__init__ は実務でもほぼ必ず使う重要なメソッドです。「インスタンスを作ると同時に初期値をセットする」という流れをしっかり覚えておきましょう。


コメント