回答編集履歴
1
誤記修正
test
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
他の方の回答と同じですが、違う観点から。
|
2
2
|
|
3
3
|
Pointクラスの定義が、用途に対して不完全なのが原因です。
|
4
|
-
質問の定義では、クラス変数としてx、yを持ちます。ただし、
|
4
|
+
質問の定義では、クラス変数としてx、yを持ちます。ただし、`__init__`メソッドを新規定義しておらず、また、変更するためのメソッドも無いので、それぞれの値が0固定で変更できません。
|
5
5
|
|
6
6
|
この状態で
|
7
7
|
```python
|
8
8
|
point = Point(x=0, y=0)
|
9
9
|
```
|
10
|
-
このように、コンストラクタを呼ぶと、Pointクラスでは定義されていないので、デフォルトの何も引数を受け付けず、何もしない
|
10
|
+
このように、コンストラクタを呼ぶと、Pointクラスでは定義されていないので、デフォルトの何も引数を受け付けず、何もしない`__init__`メソッドが呼ばれます。 引数は受け付けないので、質問のエラーが発生します。
|
11
11
|
dataclassにするとできるのは、dataclassがクラス定義にしたがって、適切なコンストラクタを自動で生成するからです。
|
12
12
|
https://docs.python.org/ja/3/library/dataclasses.html#module-dataclasses
|
13
|
-
> このモジュールは、__init__() や __repr__() のような special method を生成し、ユーザー定義のクラスに自動的に追加するデコレータや関数を提供します。
|
13
|
+
> このモジュールは、`__init__()` や `__repr__()` のような special method を生成し、ユーザー定義のクラスに自動的に追加するデコレータや関数を提供します。
|
14
14
|
|
15
15
|
caseの中のPoint()については、他の方の説明のとおりです。
|
16
16
|
|