回答編集履歴

5

追記

2020/01/09 12:52

投稿

quickquip
quickquip

スコア11040

test CHANGED
@@ -80,7 +80,7 @@
80
80
 
81
81
  「`__file__`はモジュールの特殊な属性です」という説明は正しいと思います。
82
82
 
83
- でもそれは「属性の中でもこれは特別なのですよ」と言っているだけで、「特殊な属性」が何か定義がある用語だとは思いません。
83
+ でもそれは「モジュールが持つ属性の中でもこれは特別なのですよ」と言っているだけで、「特殊な属性」が何か定義がある用語だとは思いません。
84
84
 
85
85
 
86
86
 

4

追記

2020/01/09 12:52

投稿

quickquip
quickquip

スコア11040

test CHANGED
@@ -56,7 +56,7 @@
56
56
 
57
57
  `__file__`は「モジュールが持つ属性」あるいは「モジュールに必ず定義されているグローバル変数」です。
58
58
 
59
- それ以上でもそれ以下でもなく特別な何かではありません。
59
+ それ以上でもそれ以下でもなく(Pythonから見たら)特別な何かではありません。
60
60
 
61
61
 
62
62
 

3

追記

2020/01/09 12:49

投稿

quickquip
quickquip

スコア11040

test CHANGED
@@ -41,3 +41,137 @@
41
41
 
42
42
 
43
43
  特殊メソッド以外の「_が2つ前後についた名前」に特別な名前が付いているわけではないです。
44
+
45
+
46
+
47
+ ----
48
+
49
+
50
+
51
+ > `__file__`は、「」だ。という回答がいただきたいです。
52
+
53
+
54
+
55
+
56
+
57
+ `__file__`は「モジュールが持つ属性」あるいは「モジュールに必ず定義されているグローバル変数」です。
58
+
59
+ それ以上でもそれ以下でもなく特別な何かではありません。
60
+
61
+
62
+
63
+ ----
64
+
65
+
66
+
67
+ "特殊属性"は用語ではないと思っています。
68
+
69
+
70
+
71
+ 用語として扱われることもままありますが、定義なんてなくて、「これらは特殊な属性です」とドキュメントに**列挙され書かれたもの**がただ"特殊属性"と呼ばれているのではないでしょうか。
72
+
73
+
74
+
75
+ 例えば、ドキュメントに「特殊な文法」とか「特殊文字」とか「特殊な例外処理」とかいう表現が登場しますが、
76
+
77
+ 「特殊文法」とか「特殊文字」とか「特殊例外処理」が用語ですか? と言ったら違うでしょう。
78
+
79
+
80
+
81
+ 「`__file__`はモジュールの特殊な属性です」という説明は正しいと思います。
82
+
83
+ でもそれは「属性の中でもこれは特別なのですよ」と言っているだけで、「特殊な属性」が何か定義がある用語だとは思いません。
84
+
85
+
86
+
87
+ ----
88
+
89
+
90
+
91
+ > では、`__file__`は、変数なのでしょうか。メソッドなのでしょうか。
92
+
93
+
94
+
95
+ 実のところPythonの実行モデルには「変数」という概念はありません。
96
+
97
+ あるのは「名前空間」と「名前」です。
98
+
99
+ ([言語リファレンス](https://docs.python.org/ja/3.6/reference/index.html)に変数という項目がありません。あるのは"名前づけと束縛 (naming and binding)"です。[完全な文法仕様](https://docs.python.org/ja/3.6/reference/grammar.html)にvariableがありません。nameです)
100
+
101
+
102
+
103
+ モジュールが持つ名前空間に束縛された名前のことを**便宜上**"グローバル変数"と呼んでいます。
104
+
105
+ 関数を実行したときにできる名前空間に束縛された名前のことを**便宜上**"ローカル変数"と呼んでいます。
106
+
107
+ クラスが持つ名前空間に束縛された名前のことを**便宜上**"クラス変数"と呼んでいます。
108
+
109
+ インスタンスが持つ名前空間に束縛された名前のことを**便宜上**"インスタンス変数"と呼んでいます。
110
+
111
+
112
+
113
+ > ここには`__file__`は特殊なグローバル変数だという記述があります。
114
+
115
+
116
+
117
+ その通りです。"モジュールに束縛された名前"ですから、それをグローバル変数と呼ぶのは合ってます。
118
+
119
+
120
+
121
+ ----
122
+
123
+
124
+
125
+ > 変数なのか関数なのか調べれないかと
126
+
127
+
128
+
129
+ この2つは対立概念にはなりません。
130
+
131
+
132
+
133
+ 変数なのか? という問いはそれが名前かどうかに依ります。つまり`__file__`**が**名前かどうか? という話です。
134
+
135
+
136
+
137
+ 関数なのか? という問いはオブジェクトが関数かどうか(functionクラスのインスタンスか)に依ります。つまり`__file__`**という名前で参照されるオブジェクトが**関数かどうか? という話です。
138
+
139
+
140
+
141
+ ----
142
+
143
+
144
+
145
+ 属性は [ここ](https://docs.python.org/ja/3.6/glossary.html#term-attribute)に定義がありますね。
146
+
147
+ "オブジェクトに関連付けられ、ドット表記式によって名前で参照される値"が属性です。
148
+
149
+
150
+
151
+ `__file__`という名前はモジュールに定義された名前(=グローバル変数)で、モジュールに定義された名前は属性としてアクセスできます。
152
+
153
+ `モジュール名.__file__`という名前でアクセス可能なので、`__file__`は"モジュールの属性"です。
154
+
155
+
156
+
157
+
158
+
159
+ ----
160
+
161
+
162
+
163
+
164
+
165
+ メソッドは [ここ](https://docs.python.org/ja/3.6/glossary.html#term-method)に定義がありますね。
166
+
167
+ "クラス本体の中で定義された関数"がメソッドです。`__file__`は、
168
+
169
+
170
+
171
+ 1. 関数でない
172
+
173
+ 1. クラスの中で定義されていない
174
+
175
+
176
+
177
+ という2重の意味でメソッドではありえません。

2

些細

2020/01/09 12:48

投稿

quickquip
quickquip

スコア11040

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- そんな回答は付いていません。(質問した人が誤読しているだけです)
5
+ そんな回答は付いていません。誤読しているだけです
6
6
 
7
7
 
8
8
 

1

些細

2020/01/08 00:56

投稿

quickquip
quickquip

スコア11040

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- そんな回答はありません。(質問した人が誤読しているだけです)
5
+ そんな回答は付いていません。(質問した人が誤読しているだけです)
6
6
 
7
7
 
8
8