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

回答編集履歴

3

コードのミスを訂正/説明補足

2018/02/28 05:19

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  > 関数(def)の中でself.を着けない変数は、関数終了時に破棄される
2
2
 
3
- 概ねよいとも言えますが、この表現は不正確かも知れません。`self.`を付けないというのは「変数名を直接指定してアクセスする場合」という意味と思いますが、そのようにアクセスする変数は「ローカル変数」の場合と「グローバル変数」の場合があります。
3
+ 概ねよいとも言えますが、この表現は不正確かも知れません。`self.`を付けないというのは「変数名を直接指定してアクセスする場合」という意味と思いますが、そのようにアクセスする変数は「ローカル変数」の場合と「グローバル変数」の場合があります。関数(メソッド)終了時に破棄されるのは「ローカル変数」の方だけです。
4
4
 
5
5
  ```Python
6
6
  g1 = 1
@@ -10,7 +10,7 @@
10
10
  def method1(self):
11
11
  a = 1 # aはmethod1のローカル変数
12
12
  print(g1) # g1はグローバル変数
13
- global g
13
+ global g2
14
14
  g2 = 3 # g2もグローバル変数
15
15
  ```
16
16
 

2

コードのコメントを変更

2018/02/28 05:19

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -31,7 +31,7 @@
31
31
 
32
32
  a = A()
33
33
  print(a.x) # 1 (インスタンス変数xが優先されている)
34
- print(A.x) # 2 (でもクラス名を指定すればアクセスできる)
34
+ print(A.x) # 2 (でもクラス名を指定すればクラス変数の方をアクセスできる)
35
- print(a.y) # 3 (同のインスタンス変数がなければ確かにクラス変数にアクセスできる)
35
+ print(a.y) # 3 (同名のインスタンス変数がなければインスタンスを介してクラス変数にアクセスできる)
36
36
  print(A.y) # 3 (でもクラス共通の変数なんだからクラス名でアクセスした方がいいんじゃないかな)
37
37
  ```

1

コードのミスを変更

2018/02/28 03:53

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -33,5 +33,5 @@
33
33
  print(a.x) # 1 (インスタンス変数xが優先されている)
34
34
  print(A.x) # 2 (でもクラス名を指定すればアクセスできる)
35
35
  print(a.y) # 3 (同じ名前のインスタンス変数がなければ確かにクラス変数にアクセスできる)
36
- print(A.y) # 4 (でもクラス共通の変数なんだからクラス名でアクセスした方がいいんじゃないかな)
36
+ print(A.y) # 3 (でもクラス共通の変数なんだからクラス名でアクセスした方がいいんじゃないかな)
37
37
  ```