Python
 Computer >> コンピューター >  >> プログラミング >> Python

【初心者向け】Pythonクラスのselfと__init__メソッドの違いをわかりやすく解説

selfとは

「self」は、クラスのインスタンス(実体)そのものを表すために使われる特別な引数です。Pythonでは、この「self」キーワードを通じて、クラス内の属性(変数)やメソッド(関数)にアクセスします。インスタンスメソッドを呼び出す際、Pythonは自動的にそのインスタンス自身を第1引数として渡してくれるため、呼び出し側で明示的に指定する必要はありません。

__init__メソッドとは

「__init__」は、Pythonクラスにあらかじめ用意されている予約済み(特殊)メソッドの一つです。オブジェクト指向プログラミングの用語では「コンストラクタ」と呼ばれます。このメソッドは、クラスからオブジェクト(インスタンス)が生成された瞬間に自動的に呼び出され、クラスの属性を初期化する役割を担います。

サンプルコード

例として、幅(breadth)120単位・長さ(length)160単位の長方形の土地を考えてみます。1平方単位あたりの費用が2000ルピーである場合、土地の面積と総費用を求めてみましょう。

class Rectangle:
    def __init__(self, length, breadth, unit_cost=0):
        self.length = length
        self.breadth = breadth
        self.unit_cost = unit_cost
    def get_area(self):
        return self.length * self.breadth
    def calculate_cost(self):
        area = self.get_area()
        return area * self.unit_cost

# 幅 = 120単位、長さ = 160単位、1平方単位あたり2000ルピー
r = Rectangle(160, 120, 2000)
print("Area of Rectangle: %s sq units" % (r.get_area()))
print("Cost of rectangular field: Rs.%s" % (r.calculate_cost()))

実行結果

上記のコードを実行すると、次のような出力が得られます。

Area of Rectangle: 19200 sq units
Cost of rectangular field: Rs.38400000

このコードでは、Rectangle(160, 120, 2000) の時点で __init__ メソッドが自動的に呼ばれ、引数として渡した値が self.lengthself.breadthself.unit_cost にそれぞれ格納されます。その後、r.get_area()r.calculate_cost() を呼び出すことで、そのインスタンス固有のデータを使った計算が可能になります。

まとめ:selfと__init__の違い

self:クラスの各インスタンス自身を指す引数であり、インスタンスの属性や他のメソッドへアクセスするために使用されます。
__init__:インスタンス生成時に自動的に呼び出される特殊メソッド(コンストラクタ)で、主に属性の初期化を行います。

つまり、「self」は常に存在するインスタンスへの参照であるのに対し、「__init__」はインスタンス作成時に一度だけ実行される初期化処理のためのメソッドです。両者は密接に連携しながら、Pythonのオブジェクト指向プログラミングを支えています。

  1. 抽象クラスとインターフェースの違いを徹底解説

    抽象クラスとインターフェースの違いとはJavaなどのオブジェクト指向プログラミング言語では、抽象クラスとインターフェースはどちらも「抽象的な型」を定義するために使用されます。しかし、両者には明確な違いがあり、適切に使い分けることがプログラム設計の質を大きく左右します。抽象クラスの特徴抽象クラスは、インスタンスメソッドとしてデフォルトの動作(具体的な実装)を持つことができます。そのため、複数の子クラスで共有する共通処理をあらかじめ実装しておくことが可能です。また、コンストラクタやインスタンスフィールド(状態)を持つこともできます。インターフェースの特徴一方、インターフェースは定数とインスタンスメ

  2. Pythonのtkinterとtkinter.ttkウィジェットの違いとは?スタイリング方法を解説

    tkinter.ttkは、tkinterウィジェットのスタイル(見た目)を設定するためのモジュールです。HTML要素にCSSでデザインを適用するように、tkinter.ttkを使うことでtkinterウィジェットの外観を自由にカスタマイズできます。 tkinterウィジェットとtkinter.ttkの主な違い tkinterウィジェットは、ボタン・ラベル・テキスト・スクロールバーなど、基本的なGUI部品を追加するために使用します。一方、tkinter.ttkは標準のtkinterよりも多くの種類のウィジェットをサポートしています。 tkinter.ttkではPlaceやPack()、Grid