1回目のgetEnv()と2回目のgetEev()は同じ結果を返し、変更が反映されません。
いえ、変更が反映されますけれど... ところどころ小さなバグは直してます。
Python
1class Environment:
2 def __init__(self, width, depth):
3 self.Env = [[0 for w in range(width)] for d in range(depth)]
4 self.updater = Updater(self)
5
6 def getEnv(self):
7 return self.Env
8
9class Updater:
10 def __init__(self, Environment):
11 self.Env = Environment.Env
12
13 def changeEnv(self, num):
14 self.Env[0][0] = num
15
16
17my_env = Environment(5, 5)
18print(my_env.getEnv())
19my_env.updater.changeEnv(10)
20print(my_env.getEnv())
実行結果 Wandbox
[[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]]
[[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]]
ひょっとしたら
ハマるとすれば、『Envに再代入してしまった場合』です。
Python
1class Environment:
2 def __init__(self, width, depth):
3 self.Env = [[0 for w in range(width)] for d in range(depth)]
4 self.updater = Updater(self)
5
6 def getEnv(self):
7 return self.Env
8
9class Updater:
10 def __init__(self, Environment):
11 self.Env = Environment.Env
12
13 def swapEnv(self, new_env):
14 self.Env = new_env
15
16
17my_env = Environment(5, 5)
18print(my_env.getEnv() is my_env.updater.Env)
19
20my_env.updater.swapEnv([1, 2, 3])
21print(my_env.getEnv())
22print(my_env.updater.Env)
23
24print(my_env.getEnv() is my_env.updater.Env)
実行結果 Wandbox
True
[[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]]
[1, 2, 3]
False
こっちでしょうか?
質問編集を受けて
UpdaterインスタンスがEnvironmentインスタンスを直接保持するように
こういうことです。
Python
1class Environment:
2 def __init__(self, width, depth):
3 self.Env = [[0 for w in range(width)] for d in range(depth)]
4 self.updater = Updater(self)
5
6 def getEnv(self):
7 return self.Env
8
9class Updater:
10 def __init__(self, Environment):
11 self.Environment = Environment
12
13 def changeEnv(self, width, depth):
14 self.Environment.Env = [[1 for w in range(width)] for d in range(depth)]
15
16my_env = Environment(5, 5)
17print(my_env.getEnv())
18my_env.updater.changeEnv(10, 10)
19print(my_env.getEnv())
実行結果 Wandbox
[[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]]
[[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]]
EnvironmentクラスがEnv属性を持ってしまっているのが問題をややこしくしているような。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/11 14:51
2018/05/11 14:56
2018/05/11 14:58 編集
2018/05/11 15:04
2018/05/11 15:16
2018/05/11 15:16
2018/05/11 15:17
2018/05/11 15:25 編集
2018/05/11 15:35
2018/05/11 15:41
2018/05/11 15:46
2018/05/11 15:47
2018/05/11 15:52
2018/05/11 15:59
2018/05/11 16:08
2018/05/11 16:13
2018/05/11 16:17
2018/05/11 16:23
2018/05/11 16:25