回答編集履歴
2
追記
answer
CHANGED
@@ -53,7 +53,7 @@
|
|
53
53
|
|
54
54
|
```
|
55
55
|
|
56
|
-
このように関数は`function`クラスのインスタンスであり、`function`クラスのコンストラクタを適切に呼び出すことでインスタンス化できます。`def`で書けるのは糖衣構文に過ぎません。
|
56
|
+
このように関数は`function`クラスのインスタンスであり、実際に`function`クラスのコンストラクタを適切に呼び出すことでインスタンス化して生成できます。`def`で書けるのは糖衣構文に過ぎません。
|
57
57
|
|
58
58
|
- 例2:クラスの場合
|
59
59
|
```python
|
1
追記
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
Python的な「すべてがオブジェクト」は「すべてがインスタンス」であることを表します。クラス、関数、メソッドなどもインスタンスの一種に過ぎません。特別な仕掛けがあるのでクラス、関数、メソッドとして使えるだけで。
|
2
2
|
|
3
3
|
- 例1:関数の場合
|
4
4
|
```python
|
@@ -154,14 +154,25 @@
|
|
154
154
|
事情は関数のときと同じで、クラスは`type`クラスのインスタンスに過ぎません。`class`で書けるのは糖衣構文です。
|
155
155
|
(ただし`type`クラスも`type`クラスのインスタンスと考えると破綻しますが、その点については組み込み型なのである種のトリックがあります)。
|
156
156
|
|
157
|
-
そしてすべてがインスタンスであるということから、
|
157
|
+
そしてすべてがインスタンスであるということから、Pythonの変数はすべてJavaでいうところの参照型変数であること、どんなデータであってもGCが等しく同様にメモリ管理を行うことなどが帰結します。
|
158
158
|
|
159
159
|
あ、ちなみに「変数名」は構文要素なので「オブジェクト」ではありません。コード上の「名前」に「オブジェクト」を束縛できる仕組みがある、というだけです。
|
160
160
|
|
161
161
|
---
|
162
162
|
|
163
|
-
「全てがオブジェクト**ではない**」言語についてですが、まずJavaでいう値型変数(`int`など)が挙げられます。あれはC言語の変数と同じような仕組みで、変数がメモリ領域を示す「箱」だと理解できます。関数の引数にすれば値渡しです。
|
163
|
+
「全てがオブジェクト**ではない**」言語についてですが、まずJavaでいう値型変数(`int`など)が挙げられます。あれはC言語の変数と同じような仕組みで、変数がメモリ領域を示す「箱」だと理解できます。関数の引数にすれば値渡しです。Pythonはそうではありません。
|
164
164
|
|
165
|
-
また、JavaやRubyでは、クラスやメソッドは
|
165
|
+
また、JavaやRubyでは、クラスやメソッドはPython的な「インスタンス」ではありません(ただし広い意味でのオブジェクトである場合はある)。
|
166
166
|
|
167
|
-
値型はともかく、クラスやメソッドまで「インスタンス」とするのはクラスベースのオブジェクト指向言語としては異端です。どちらかといえば、プロトタイプベースのオブジェクト指向言語に糖衣構文をてんこ盛りにして、クラスベースっぽく使えるようにしたと解釈した方がわかりやすいかもしれません。なんのことはない、最近のJavaScriptみたいなものですね。
|
167
|
+
値型はともかく、クラスやメソッドまで「インスタンス」とするのはクラスベースのオブジェクト指向言語としては異端です。どちらかといえば、プロトタイプベースのオブジェクト指向言語に糖衣構文をてんこ盛りにして、クラスベースっぽく使えるようにしたと解釈した方がわかりやすいかもしれません。なんのことはない、最近のJavaScriptみたいなものですね。
|
168
|
+
|
169
|
+
---
|
170
|
+
|
171
|
+
> >「全てがアトリビュートとメソッドを持つことができる」
|
172
|
+
|
173
|
+
メソッドはアトリビュートの一種なので、アトリビュートだけあれば良い。
|
174
|
+
|
175
|
+
> 実は関数や変数の前のオブジェクト名が省略されている
|
176
|
+
> (例えばmainオブジェクトみたいなのがあって、main.関数()やmain.変数 が内部的な表記である)
|
177
|
+
|
178
|
+
Rubyはそれらしいですが、Pythonの場合は実行時の名前空間から変数名に対応するインスタンスを探してくるだけです。
|