回答編集履歴
1
説明のまずいぶぶんを修正
test
CHANGED
@@ -4,7 +4,43 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
よくある普通のクラスは`type`のインスタンスです。`type`を継承
|
7
|
+
よくある普通のクラスは`type`のインスタンスです。`type`を継承するとメタクラスが作れます。`class B(metaclass=A):`のような記述は、`B`クラスそのものを`A`のインスタンスとして作りますよ、ということを表します。
|
8
|
+
|
9
|
+
```python
|
10
|
+
|
11
|
+
>>> class Hoge:
|
12
|
+
|
13
|
+
... pass
|
14
|
+
|
15
|
+
...
|
16
|
+
|
17
|
+
>>> class Fuga(type):
|
18
|
+
|
19
|
+
... pass
|
20
|
+
|
21
|
+
...
|
22
|
+
|
23
|
+
>>> class Piyo(metaclass=Fuga):
|
24
|
+
|
25
|
+
... pass
|
26
|
+
|
27
|
+
...
|
28
|
+
|
29
|
+
>>> type(Hoge)
|
30
|
+
|
31
|
+
<class 'type'>
|
32
|
+
|
33
|
+
>>> type(Fuga)
|
34
|
+
|
35
|
+
<class 'type'>
|
36
|
+
|
37
|
+
>>> type(Piyo)
|
38
|
+
|
39
|
+
<class '__main__.Fuga'>
|
40
|
+
|
41
|
+
```
|
42
|
+
|
43
|
+
`Piyo`だけ型が違いますね。これがメタクラスの機能です。
|
8
44
|
|
9
45
|
|
10
46
|
|
@@ -152,7 +188,7 @@
|
|
152
188
|
|
153
189
|
|
154
190
|
|
155
|
-
こういう操作を可能にする、ということなのです。どの段階で何を受け取るのかを注意してください。
|
191
|
+
こういう操作を可能にする(ここでは`B`の**定義時**に引数を受け取っている)、ということなのです。どの段階で何を受け取るのかを注意してください。
|
156
192
|
|
157
193
|
|
158
194
|
|