使用来自父类的networkX图作为另一个类中的变量

时间:2017-04-30 18:45:05

标签: python-3.x inheritance networkx

老实说,我不确定我是否以正确的方式攻击这个问题,但我使用networkx制作了一张图表,以便在我正在制作的游戏中使用地图。游戏有效,但截至目前它还没有定位系统。我在一个类中创建了图形对象,我希望类单元继承图形' G'这样我就可以将它分配给map变量了。我终于得到它不发送错误,但是当我打印地图变量时,它不会打印图形。 我如何知道G是否被分配给地图变量,这是最好的方法吗?我愿意接受建议。

class Graph(BaseGameEntity):
def __index__(self):
    G = nx.Graph()
    G.add_edges_from([(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,8),(6,9),(9,10),(10,11),
            (11,12),(10,13),(13,14),(14,15),(15,16),(16,17),(15,18),(18,19),(19,20),
            (18,21),(21,22),(22,23),(23,24)])
    G.node[1]['building'] = 'Home'
    G.node[12]['building'] = 'Store'
    G.node[24]['building'] = 'Mine'
    G.node[8]['building'] = 'Bank'
    G.node[17]['building'] = 'Saloon'
    G.node[20]['building'] = 'Jail'
    G.node[2]['Mugger'] = 'Mean Mugger'
    G.node[7]['Path'] = 'Rocky Path'
    G.node[11]['Rock'] = 'Big Rock'
    G.node[16]['Mugger'] = 'Nice Mugger'
    G.node[23]['Path'] = 'Flooded Path'
    G.node[3]['Surprise'] = 'Money'
    G.node[4]['Rock'] = 'Small Rock'
    G.node[5]['Path'] = 'Rocky Path'
    G.node[6]['Path'] = 'Rocky Path'
    G.node[9]['Surprise'] = 'Money'
    G.node[10]['Surprise'] = 'Health'
    G.node[13]['Path'] = 'Rocky Path'
    G.node[14]['Path'] = 'Rocky Path'
    G.node[13]['Rock'] = 'Medium Rock'
    G.node[15]['Path'] = 'Rocky Path'
    G.node[18]['Surprise'] = 'Money'
    G.node[19]['Surprise'] = 'Health'
    G.node[21]['Path'] = 'Smooth Path'
    G.node[22]['Path'] = 'Rocky Path'

class Cell(Graph):
    def __init__(self, game, objects, blocked, position, coords, map, graph):
        super().__init__()
        self.objects = {}
        self.blocked = False
        self.position = (0,0)
        self.map = graph.G
        print(map)

1 个答案:

答案 0 :(得分:0)

我不确定你想做什么,但我在你的代码中看到了几个问题。

首先,您实现了方法__index__,但在实践中很少有用例。即使你打算这样做,它也必须返回一个结果,但你没有使用return语句。

假设您返回G,它对您没有帮助,因为nx.Graph不可清,而地图键必须是可清洗的。

我不知道如何解决这个问题,因为我不明白你的意思。

另一种可能性是你并不是要实现__index__(一种改变[]运算符的行为的模糊方法),而是__init__(对象构造函数)。 在这种情况下,您必须将__index__替换为__init__,并将其G分配给self(例如self.G = G功能)。