I want to access a list of instantiated objects with a method inside the objects' class in Python 3. I assume I can't give the the whole list to the object, as it would contain itself.
Concretely: how do I access cells[] from within the class cell? Or is this the wrong way to think about it? the end goal is to easily program cell behavior like cell.moveUp() -- all cells are connected to 8 neighbors.
I am missing something, probably since I don't have much experience in python/programming.
#!/usr/bin/env python3
import random
class cell:
    """ cell for celluar automata """
    def __init__(self, n=0, nghbrs=[], a=0.00, b=0.00, c=0.00):
        self.n = n #id
        self.nghbrs = nghbrs #list of connected neighbors
        self.a = a  #a value of the cell 
        self.b = b
        self.c = c
    def growUp(self):
        if self.a > .7:  # if cell is "bright"
            cells[self.nghbrs[7]].a = self.a  # update cell above (nghbrs[7] = cell above )
def main():
    iterations = 4
    links = initLinks()  # 150 random links [link0, link2, ... , link7]*150
    val1 = initval()  # 150 random values
    cells = [cell(nghbrs[0], nghbrs[1], val1[nghbrs[0]])for nghbrs in enumerate(
        links)]  # create cell objects, store them in cells and init. neigbours , a
    for i in range(iterations):  # celluar automata loop
        for c in cells:
            c.growUp()
def initLinks(): #for stackoverflow; in real use the cells are arranged in a grid
    nghbrs = []
    for i in range(150):
        links = []
        for j in range(8):
            links.append(random.randrange(0, 150))
        nghbrs.append(links)
    return nghbrs
def initval():
    vals = []
    for i in range(150):
        vals.append(random.random())
    return vals
if __name__ == "__main__":
    main()
run as is cells cannot be accessed in the method growUp():
NameError: name 'cells' is not defined