pup*_*dog 0 python variables class object
当试图访问实例变量self.density在select_object从内部populate_grid的方法class Map,我得到AttributeError: 'Map' object has no attribute 'density'.
但是,self.density从select_object单独访问工作正常.有人可以解释一下我没看到的内容吗?
# Handles player and scene locations
from random import randint, choice
class Map(object):
def __init__(self, size, objects, density=0.05):
self.size = size
self.objects = objects
self.grid = self.populate_grid(size)
self.density = density
def populate_grid(self, size):
grid = {}
for i in range(size):
y = 0
for j in range(size):
grid[C(i, y)] = self.select_object()
y += 1
return grid
def select_object(self):
if randint(0, 100) < (self.density*100):
print('yes')
return choice(self.objects)
else:
return 0
random_objects = ['A', 'B', 'C', 'D', 'E']
s = Map(4, random_objects, 0.5)
s.select_object()
Run Code Online (Sandbox Code Playgroud)
完整代码可在此处获得:http://pastebin.com/TxLMSbH0
问题是你self.grid = self.populate_grid(size) 在初始化self.density 之前调用.所以当populate_grid执行时,self.density没有设置.
解决方案是self.density = density超越该调用.