質問するログイン新規登録

回答編集履歴

3

f

2020/08/25 16:04

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -15,10 +15,9 @@
15
15
 
16
16
  なお厳密には`__init__`はインスタンスを生成した**後**で呼ばれるものであり、インスタンスを生成する**とき**に呼ばれるものではないため、一般的な他のプログラミング言語のコンストラクターとは少し異なります。
17
17
 
18
- 一般的なコンストラクタに該当するのは`__new__`になります。
18
+ (狭義の)「コンストラクター」に該当するのは`__new__`になります。
19
- (通常`__new__`をコードで扱うことはありません、
20
- `a=Foo()`というコードによって内部的に自動的に`__new__`が呼び出されるからです。
21
- この意味で`pythonのコンストラクタはFoo()という形式記述である`という言い方もできるかもしれません
19
+ (なお、`__init__`をコンストラクタというのは決して誤りません。同じ働きをするものなので。
20
+ (通常`__new__`をコードで扱うことはあまりありません。singletonパターン(ここでは詳細は書きませんが)をつくるとき等、限られた場面で使われることはあります)
22
21
 
23
22
  [https://docs.python.org/3/reference/datamodel.html#object.__init__](https://docs.python.org/3/reference/datamodel.html#object.__init__)
24
23
  ```

2

f

2020/08/25 16:03

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -31,7 +31,7 @@
31
31
  ```
32
32
 
33
33
 
34
- あと、Javaでは継承先で、継承元のコンストラクタを自動で呼んでくれますが、pythonは継承先で継承元の___init__は自動では呼ばれません。
34
+ あと、Javaでは継承先で、継承元のコンストラクタを自動で呼んでくれますが、pythonは継承先で継承元の`__init__`は自動では呼ばれません。
35
35
 
36
36
  これも`__init__`が他のコンストラクタとは異なっている特徴かもしれません。
37
37
 

1

f

2020/08/25 15:36

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -31,8 +31,10 @@
31
31
  ```
32
32
 
33
33
 
34
- あと、Javaみたいに、継承先で、継承元のコンストラクタを自動では呼んでくれたりしません。
34
+ あと、Javaでは継承先で、継承元のコンストラクタを自動では呼んでくれますが、pythonは継承先で継承元の___init__は自動では呼ばれません。
35
35
 
36
+ これも`__init__`が他のコンストラクタとは異なっている特徴かもしれません。
37
+
36
38
  ```
37
39
  class Superclass(object):
38
40
  def __init__(self):