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

回答編集履歴

2

追記

2018/09/10 01:14

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -18,6 +18,12 @@
18
18
 
19
19
  **だめなパターン**
20
20
  ```python
21
+ """
22
+ 以下のエラーが出るはず
23
+ self.fuga = Fuga()
24
+ NameError: name 'Fuga' is not defined
25
+ """
26
+
21
27
  class Hoge:
22
28
  def __init__(self):
23
29
  self.fuga = Fuga()

1

追記

2018/09/10 01:14

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -1,3 +1,31 @@
1
1
  `import class ClassA`は間違いだと思いますが……
2
2
 
3
- クラス内であろうとクラス外であろうと、同様に使えます。よほど変なものでない限り、どこで使っても挙動は同じです。
3
+ クラス内であろうとクラス外であろうと、同様に使えます。よほど変なものでない限り、どこで使っても挙動は同じです。
4
+
5
+ 複数クラスを1ファイルに入れて相互に使う場合、ちょっと注意が要ります。
6
+
7
+ **大丈夫なパターン**
8
+ ```python
9
+ class Hoge:
10
+ def __init__(self):
11
+ self.fuga = Fuga()
12
+
13
+ class Fuga:
14
+ pass
15
+
16
+ hoge = Hoge()
17
+ ```
18
+
19
+ **だめなパターン**
20
+ ```python
21
+ class Hoge:
22
+ def __init__(self):
23
+ self.fuga = Fuga()
24
+
25
+ hoge = Hoge()
26
+
27
+ class Fuga:
28
+ pass
29
+ ```
30
+
31
+ スコープの仕組みと、`__init__`が実行されるタイミングを考えればそこまで不思議な仕様ではないかと。一般的な関数と同じです。