0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonに公式用語としての『コンストラクタ』は定義されていない話

Last updated at Posted at 2025-04-07

Pythonではクラス定義の中に __init__ という名前の(特殊)メソッドを定義すると、インスタンス作成時に呼ばれます。これがコンストラクタです。

という説明、よく見ます。
が、これはPythonに公式ドキュメントに書かれている『コンストラクタ』の用法とは明らかに異なります


https://docs.python.org/ja/3.12/library/itertools.html#itertools.chain.from_iterable

classmethod chain.from_iterable(iterable)
chain() のためのもう一つのコンストラクタです。

https://docs.python.org/ja/3.12/library/stdtypes.html#index-13

コンストラクタ int() 、 float() 、 complex() で、特定の型の数を生成できます。

https://docs.python.org/ja/3.12/library/stdtypes.html#list

型コンストラクタを使う: list() または list(iterable)

https://docs.python.org/ja/3.12/library/datetime.html

他のコンストラクタ、および全てのクラスメソッドを以下に示します:

https://docs.python.org/ja/3/library/tarfile.html#tarfile.TarFile.open

代替コンストラクターです。

https://docs.python.org/ja/3.12/library/zoneinfo.html#zoneinfo.ZoneInfo

ZoneInfo クラスには2つの別のコンストラクターがあります
classmethod ZoneInfo.from_file(fobj, /, key=None)
(略)
classmethod ZoneInfo.no_cache(key)

どうでしょう。
これらの箇所を読んでなお「クラス定義の中の __init__ という特殊メソッド」をPython公式ドキュメントがコンストラクタと呼んでいるなどと思えるでしょうか。

  • インスタンス化のために呼び出されるクラス名や型名に束縛されている呼び出し可能オブジェクトのこと
  • インスタンス化の目的で設計された呼び出し可能オブジェクト(特にクラスメソッド)のこと

をコンストラクタと呼んでいると私は思います。


じっさいPythonの公式ドキュメントで __init__ に対してコンストラクタなどと呼んでいる箇所はありません。
それどころか__init__になにか固有な名称が付けられてはいないです。一貫して__init__メソッドと書かれているはすです。
(多少筆が滑って、別の書き方になっている箇所はあったりするかもしれません。私は見つけてないです)

「C++やJava言語でいうコンストラクタ」の用法を「プログラミング言語一般のコンストラクタ」だと思っている人が多すぎて、似たような用途の(しかし決して同じ動作ではない)__init__ のことをコンストラクタだと説明してしまっているだけだと思います。
Pythonプログラマではない人、Python公式ドキュメントなんて読んでいない人とコミュニケーションするのに、あえてあわせてコンストラクタと呼ぶのは構わないでしょう。
でもPythonの言語に関する(深い)話をしている時は、__init__メソッドと呼ぶ方が混乱がないんじゃないでしょうか?

とはいえ「コンストラクタ」が用語集にも文法定義にもでてこないし、言語リファレンスの項目にもないという状況なのでやっかいですね。
ある種の特定の使い方をする呼び出し可能オブジェクトだというだけですから、文法定義にも言語リファレンスにも出てこなくて当たり前ではありますが。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?