回答編集履歴

2

追記

2018/09/10 01:14

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -38,6 +38,18 @@
38
38
 
39
39
  ```python
40
40
 
41
+ """
42
+
43
+ 以下のエラーが出るはず
44
+
45
+ self.fuga = Fuga()
46
+
47
+ NameError: name 'Fuga' is not defined
48
+
49
+ """
50
+
51
+
52
+
41
53
  class Hoge:
42
54
 
43
55
  def __init__(self):

1

追記

2018/09/10 01:14

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -3,3 +3,59 @@
3
3
 
4
4
 
5
5
  クラス内であろうとクラス外であろうと、同様に使えます。よほど変なものでない限り、どこで使っても挙動は同じです。
6
+
7
+
8
+
9
+ 複数クラスを1ファイルに入れて相互に使う場合、ちょっと注意が要ります。
10
+
11
+
12
+
13
+ **大丈夫なパターン**
14
+
15
+ ```python
16
+
17
+ class Hoge:
18
+
19
+ def __init__(self):
20
+
21
+ self.fuga = Fuga()
22
+
23
+
24
+
25
+ class Fuga:
26
+
27
+ pass
28
+
29
+
30
+
31
+ hoge = Hoge()
32
+
33
+ ```
34
+
35
+
36
+
37
+ **だめなパターン**
38
+
39
+ ```python
40
+
41
+ class Hoge:
42
+
43
+ def __init__(self):
44
+
45
+ self.fuga = Fuga()
46
+
47
+
48
+
49
+ hoge = Hoge()
50
+
51
+
52
+
53
+ class Fuga:
54
+
55
+ pass
56
+
57
+ ```
58
+
59
+
60
+
61
+ スコープの仕組みと、`__init__`が実行されるタイミングを考えればそこまで不思議な仕様ではないかと。一般的な関数と同じです。