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

回答編集履歴

2

追記

2018/12/27 12:57

投稿

hayataka2049
hayataka2049

スコア30939

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

追記

2018/12/27 12:57

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -1,4 +1,4 @@
1
- python的な「すべてがオブジェクト」は「すべてがインスタンス」であることを表します。クラス、関数、メソッドなどもインスタンスの一種に過ぎません。特別な仕掛けがあるのでクラス、関数、メソッドとして使えるだけで。
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
- そしてすべてがインスタンスであるということから、pythonの変数はすべてJavaでいうところの参照型変数であること、どんなデータであってもGCが等しく同様にメモリ管理を行うことなどが帰結します。
157
+ そしてすべてがインスタンスであるということから、Pythonの変数はすべてJavaでいうところの参照型変数であること、どんなデータであってもGCが等しく同様にメモリ管理を行うことなどが帰結します。
158
158
 
159
159
  あ、ちなみに「変数名」は構文要素なので「オブジェクト」ではありません。コード上の「名前」に「オブジェクト」を束縛できる仕組みがある、というだけです。
160
160
 
161
161
  ---
162
162
 
163
- 「全てがオブジェクト**ではない**」言語についてですが、まずJavaでいう値型変数(`int`など)が挙げられます。あれはC言語の変数と同じような仕組みで、変数がメモリ領域を示す「箱」だと理解できます。関数の引数にすれば値渡しです。pythonはそうではありません。
163
+ 「全てがオブジェクト**ではない**」言語についてですが、まずJavaでいう値型変数(`int`など)が挙げられます。あれはC言語の変数と同じような仕組みで、変数がメモリ領域を示す「箱」だと理解できます。関数の引数にすれば値渡しです。Pythonはそうではありません。
164
164
 
165
- また、JavaやRubyでは、クラスやメソッドはpython的な「インスタンス」ではありません(ただし広い意味でのオブジェクトである場合はある)。
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の場合は実行時の名前空間から変数名に対応するインスタンスを探してくるだけです。