Python:无法访问Class函数中的Instance Variable

pup*_*dog 0 python variables class object

当试图访问实例变量self.densityselect_object从内部populate_grid的方法class Map,我得到AttributeError: 'Map' object has no attribute 'density'.

但是,self.densityselect_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

tob*_*spr 5

问题是你self.grid = self.populate_grid(size) 初始化self.density 之前调用.所以当populate_grid执行时,self.density没有设置.

解决方案是self.density = density超越该调用.