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

回答編集履歴

3

追記

2018/05/11 15:09

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -68,4 +68,40 @@
68
68
  False
69
69
  ```
70
70
 
71
- こっちでしょうか?
71
+ こっちでしょうか?
72
+
73
+ 質問編集を受けて
74
+ ---
75
+ > UpdaterインスタンスがEnvironmentインスタンスを直接保持するように
76
+
77
+ こういうことです。
78
+
79
+ ```Python
80
+ class Environment:
81
+ def __init__(self, width, depth):
82
+ self.Env = [[0 for w in range(width)] for d in range(depth)]
83
+ self.updater = Updater(self)
84
+
85
+ def getEnv(self):
86
+ return self.Env
87
+
88
+ class Updater:
89
+ def __init__(self, Environment):
90
+ self.Environment = Environment
91
+
92
+ def changeEnv(self, width, depth):
93
+ self.Environment.Env = [[1 for w in range(width)] for d in range(depth)]
94
+
95
+ my_env = Environment(5, 5)
96
+ print(my_env.getEnv())
97
+ my_env.updater.changeEnv(10, 10)
98
+ print(my_env.getEnv())
99
+ ```
100
+
101
+ **実行結果** [Wandbox](https://wandbox.org/permlink/1oWvo9vHdTZa9hRT)
102
+ ```
103
+ [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
104
+ [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
105
+ ```
106
+
107
+ EnvironmentクラスがEnv属性を持ってしまっているのが問題をややこしくしているような。

2

追記

2018/05/11 15:09

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -51,13 +51,21 @@
51
51
 
52
52
 
53
53
  my_env = Environment(5, 5)
54
+ print(my_env.getEnv() is my_env.updater.Env)
55
+
54
56
  my_env.updater.swapEnv([1, 2, 3])
55
57
  print(my_env.getEnv())
56
58
  print(my_env.updater.Env)
59
+
60
+ print(my_env.getEnv() is my_env.updater.Env)
57
61
  ```
58
62
 
59
- **実行結果** [Wandbox](https://wandbox.org/permlink/CDLpfFk7AIIGQtHA)
63
+ **実行結果** [Wandbox](https://wandbox.org/permlink/6AuXdC5N3DgN1Olg)
60
64
  ```
65
+ True
61
66
  [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
62
67
  [1, 2, 3]
68
+ False
63
- ```
69
+ ```
70
+
71
+ こっちでしょうか?

1

追記

2018/05/11 14:44

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -28,4 +28,36 @@
28
28
  ```
29
29
  [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
30
30
  [[10, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
31
+ ```
32
+
33
+ ひょっとしたら
34
+ ---
35
+ ハマるとすれば、『Envに再代入してしまった場合』です。
36
+ ```Python
37
+ class Environment:
38
+ def __init__(self, width, depth):
39
+ self.Env = [[0 for w in range(width)] for d in range(depth)]
40
+ self.updater = Updater(self)
41
+
42
+ def getEnv(self):
43
+ return self.Env
44
+
45
+ class Updater:
46
+ def __init__(self, Environment):
47
+ self.Env = Environment.Env
48
+
49
+ def swapEnv(self, new_env):
50
+ self.Env = new_env
51
+
52
+
53
+ my_env = Environment(5, 5)
54
+ my_env.updater.swapEnv([1, 2, 3])
55
+ print(my_env.getEnv())
56
+ print(my_env.updater.Env)
57
+ ```
58
+
59
+ **実行結果** [Wandbox](https://wandbox.org/permlink/CDLpfFk7AIIGQtHA)
60
+ ```
61
+ [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
62
+ [1, 2, 3]
31
63
  ```