如何递归创建可单独访问的对象

时间:2012-08-28 02:25:35

标签: python object recursion creation

我是Python的新手,缺乏正式的培训。我所学到的一切都是通过我看过的书籍和一些视频。因此,虽然我理解基本概念,但我仍然遇到许多更好的程序员可能认为理所当然的事情。所以我需要帮助。

我正在制作国际象棋程序,在创建棋子时,我想知道如何使用一个功能创建所有棋子但稍后可以单独访问它们以更改其个人位置。我不能像我希望的那样将字符串变成变量。

class Name(object):
    def __init__(self, posx, posy, posz):
        self.pos= (posz, posy, posz)
        box(pos=self.pos)

然后我可以创建一个包含列表中位置的束,但仍然可以将它们作为单独的对象访问。

2 个答案:

答案 0 :(得分:2)

让自己更轻松的一种方法是不要让这些部分担心它们的位置,而是将其委托给Board对象:

import string

class Piece(object):
    def __init__(self, type, colour):
        self.type = type
        self.colour = colour
    def __str__(self):
        return 'Piece(%(type)s, %(colour)s)' % self.__dict__

class Board(dict):
    def __init__(self, width, height):
        self.update(
            dict(((x,y), None) 
                for x in string.ascii_lowercase[:width] # alphabetic axis 
                for y in xrange(1, height+1)            # numeric axis
            )
        )

    def setup(self, position_seq):
        for type, colour, position in position_seq:
            self[position] = Piece(type, colour)

initial_positions = [
    ('rook', 'W', ('a', 1)),
    ('knight', 'W', ('b', 1)),
    ('bishop', 'W', ('c', 1)),
    ('queen', 'W', ('d', 1)),
    ('king', 'W', ('e', 1)),
    ('pawn', 'W', ('a', 2)),
]

b = Board( 8,8 )
b.setup( initial_positions )
print b['a',1] # returns Piece(rook, W)

Board的setup方法采用元组列表,每个元组包含实例化新片段所需的数据,以及指定它应该在电路板上的位置。不需要递归,只是将数据传递到类中的简单循环。

答案 1 :(得分:0)

您想如何访问它们?如果你想通过字符串键访问它们,那么最简单的方法是将它们放在一个字典中。但是我不确定这是你真正想要做的。更常见的做法是将它们列入清单。