回答編集履歴
5
追記
test
CHANGED
@@ -80,7 +80,7 @@
|
|
80
80
|
|
81
81
|
「`__file__`はモジュールの特殊な属性です」という説明は正しいと思います。
|
82
82
|
|
83
|
-
でもそれは「属性の中でもこれは特別なのですよ」と言っているだけで、「特殊な属性」が何か定義がある用語だとは思いません。
|
83
|
+
でもそれは「モジュールが持つ属性の中でもこれは特別なのですよ」と言っているだけで、「特殊な属性」が何か定義がある用語だとは思いません。
|
84
84
|
|
85
85
|
|
86
86
|
|
4
追記
test
CHANGED
@@ -56,7 +56,7 @@
|
|
56
56
|
|
57
57
|
`__file__`は「モジュールが持つ属性」あるいは「モジュールに必ず定義されているグローバル変数」です。
|
58
58
|
|
59
|
-
それ以上でもそれ以下でもなく特別な何かではありません。
|
59
|
+
それ以上でもそれ以下でもなく(Pythonから見たら)特別な何かではありません。
|
60
60
|
|
61
61
|
|
62
62
|
|
3
追記
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
些細
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
そんな回答は付いていません。
|
5
|
+
そんな回答は付いていません。誤読しているだけです。
|
6
6
|
|
7
7
|
|
8
8
|
|
1
些細
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
そんな回答は
|
5
|
+
そんな回答は付いていません。(質問した人が誤読しているだけです)
|
6
6
|
|
7
7
|
|
8
8
|
|