将函数参数类型转换为Python中另一个类的对象

问题描述 投票:0回答:1

我一直在用Python(面向对象)在2D网格上创建bfs搜索算法。我有一个Grid类,负责设置2D网格,并具有一些标记墙,起点/终点等的成员函数。

class Grid:

    def __init__(self, nodes=[]):
        self.nodes = nodes

    # Initializes a grid of rl x rc and fills all nodes with and empty value of 1
    def init_grid(self, rl, cl):
        arr = []
        arr2 = []
        for i in range(rl):
            for j in range(cl):
                arr2.append(Node("1", i, j))
            arr.append(arr2)
            arr2 = []
        self.nodes = arr

    # Sets the start and end points at the specified rows and cols
    def set_start_and_end(self, startr, startc, endr, endc):
        startNode = Node("S", startr, startc)
        endNode = Node("E", endr, endc)
        self.nodes[startr][startc] = startNode
        self.nodes[endr][endc] = endNode

    def mark_visited(self, row, col):
        self.nodes[row][col].val = "V"

    def mark_wall(self, row, col):
        self.nodes[row][col].val = "X"

我还有一个文件,其中将包含我所有的搜索算法(目前仅是BFS)。在我的一个用于查找节点邻居的辅助函数中,它包含一个节点对象以及一个网格对象。

def get_neighbors(self, node, grid):
        neighbours = []

        R = len(grid)
        C = len(grid[0])

        dr = [-1, +1, 0, 0]
        dc = [0, 0, +1, -1]

        for i in range(4):
            rr = node.r + dr[i]
            cc = node.c + dc[i]

            if rr < 0 or cc < 0: continue
            if rr >= R or cc >= C: continue

            neighbour = grid[rr][cc]
            neighbours.append(neighbour)

        return neighbours

我是Python的新手,来自类型转换语言,但是有一种方法可以以某种方式类型化节点和网格对象吗?截至目前,我不需要实例化网格或节点对象,但是我不确定如何访问它们。除非我只是以错误的方式来做这件事。

我一直在用Python(面向对象)在2D网格上创建bfs搜索算法。我有一个Grid类,负责设置2D网格,并具有一些标记墙的成员函数,...

python class oop breadth-first-search
1个回答
0
投票

您的网格类函数依赖于self,因此您必须实例化以立即访问。如果您想要静态行为,只需将类属性放在构造函数之外:

© www.soinside.com 2019 - 2024. All rights reserved.