Python __init__はコンストラクタではありません:Pythonオブジェクト作成の深いダイブ

「Python __init__はコンストラクタではない:Pythonオブジェクト作成の深い探求」

Pythonのコンストラクタをいじって高速でメモリ効率の良いクラスを作る

How Python builds objects (image by ChatGPT)

__init__メソッドが実際にはコンストラクタではないことを知っていましたか?しかし、もし__init__がオブジェクトを作成しないなら、その役割は何でしょうか?Pythonではオブジェクトはどのように作られるのでしょうか?Pythonにはコンストラクタが存在するのでしょうか?

この記事の目的は、Pythonがオブジェクトを作成する仕組みをより良く理解し、それを応用して有用なアプリケーションを作るための方法を知ることです。

まず、Pythonがオブジェクトを作成する仕組みについて詳しく掘り下げます。次に、この知識を応用して実際の例を交えながら興味深いユースケースについて議論します。さあ、コーディングを始めましょう!

1. 理論: Pythonでオブジェクトを作成する

この部分では、オブジェクトを作成する際にPythonが内部でどのような処理を行っているかを理解します。次の部分では、この新しい知識を活用して第2部で実際の例を紹介します。

Pythonでオブジェクトを作成する方法

これは非常に簡単です。単にクラスのインスタンスを作成するだけです。または、strintのような組み込み型を作成することもできます。以下のコードでは、基本的なクラスのインスタンスを作成しています。このクラスには__init__関数とsay_helloメソッドが含まれています:

class SimpleObject:  greet_name:str  def __init__(self, name:str):    self.greet_name = name  def say_hello(self) -> None:    print(f"Hello {self.greet_name}!")my_instance = SimpleObject(name="bob")my_instance.say_hello()

__init__メソッドに注目してください。このメソッドはnameパラメータを受け取り、その値をSimpleObjectインスタンスのgreet_name属性に保存しています。これにより、インスタンスは状態を保持することができます。

さて、疑問が生じます。状態を保存するためには、状態を保存する対象が必要です。つまり、__init__メソッドはオブジェクトをどこから取得しているのでしょうか?

それでは、__init__はコンストラクタですか?

答えは、厳密には「いいえ」です。コンストラクタは実際に新しいオブジェクトを作成します。しかし、__init__メソッドはオブジェクトの状態を設定する責任を持っています。それはただ単にパラメータを受け取り、それをgreet_nameのようなクラス属性に割り当てるだけです。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more