回答編集履歴
2
追記
test
CHANGED
@@ -108,7 +108,7 @@
|
|
108
108
|
|
109
109
|
|
110
110
|
|
111
|
-
このように関数は`function`クラスのインスタンスであり、`function`クラスのコンストラクタを適切に呼び出すことでインスタンス化できます。`def`で書けるのは糖衣構文に過ぎません。
|
111
|
+
このように関数は`function`クラスのインスタンスであり、実際に`function`クラスのコンストラクタを適切に呼び出すことでインスタンス化して生成できます。`def`で書けるのは糖衣構文に過ぎません。
|
112
112
|
|
113
113
|
|
114
114
|
|
1
追記
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
Python的な「すべてがオブジェクト」は「すべてがインスタンス」であることを表します。クラス、関数、メソッドなどもインスタンスの一種に過ぎません。特別な仕掛けがあるのでクラス、関数、メソッドとして使えるだけで。
|
2
2
|
|
3
3
|
|
4
4
|
|
@@ -310,7 +310,7 @@
|
|
310
310
|
|
311
311
|
|
312
312
|
|
313
|
-
そしてすべてがインスタンスであるということから、
|
313
|
+
そしてすべてがインスタンスであるということから、Pythonの変数はすべてJavaでいうところの参照型変数であること、どんなデータであってもGCが等しく同様にメモリ管理を行うことなどが帰結します。
|
314
314
|
|
315
315
|
|
316
316
|
|
@@ -322,12 +322,34 @@
|
|
322
322
|
|
323
323
|
|
324
324
|
|
325
|
-
「全てがオブジェクト**ではない**」言語についてですが、まずJavaでいう値型変数(`int`など)が挙げられます。あれはC言語の変数と同じような仕組みで、変数がメモリ領域を示す「箱」だと理解できます。関数の引数にすれば値渡しです。
|
325
|
+
「全てがオブジェクト**ではない**」言語についてですが、まずJavaでいう値型変数(`int`など)が挙げられます。あれはC言語の変数と同じような仕組みで、変数がメモリ領域を示す「箱」だと理解できます。関数の引数にすれば値渡しです。Pythonはそうではありません。
|
326
|
-
|
327
|
-
|
328
|
-
|
326
|
+
|
327
|
+
|
328
|
+
|
329
|
-
また、JavaやRubyでは、クラスやメソッドは
|
329
|
+
また、JavaやRubyでは、クラスやメソッドはPython的な「インスタンス」ではありません(ただし広い意味でのオブジェクトである場合はある)。
|
330
330
|
|
331
331
|
|
332
332
|
|
333
333
|
値型はともかく、クラスやメソッドまで「インスタンス」とするのはクラスベースのオブジェクト指向言語としては異端です。どちらかといえば、プロトタイプベースのオブジェクト指向言語に糖衣構文をてんこ盛りにして、クラスベースっぽく使えるようにしたと解釈した方がわかりやすいかもしれません。なんのことはない、最近のJavaScriptみたいなものですね。
|
334
|
+
|
335
|
+
|
336
|
+
|
337
|
+
---
|
338
|
+
|
339
|
+
|
340
|
+
|
341
|
+
> >「全てがアトリビュートとメソッドを持つことができる」
|
342
|
+
|
343
|
+
|
344
|
+
|
345
|
+
メソッドはアトリビュートの一種なので、アトリビュートだけあれば良い。
|
346
|
+
|
347
|
+
|
348
|
+
|
349
|
+
> 実は関数や変数の前のオブジェクト名が省略されている
|
350
|
+
|
351
|
+
> (例えばmainオブジェクトみたいなのがあって、main.関数()やmain.変数 が内部的な表記である)
|
352
|
+
|
353
|
+
|
354
|
+
|
355
|
+
Rubyはそれらしいですが、Pythonの場合は実行時の名前空間から変数名に対応するインスタンスを探してくるだけです。
|