首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中更快地创建一组对象

如何在Python中更快地创建一组对象
EN

Stack Overflow用户
提问于 2019-12-22 11:53:05
回答 2查看 55关注 0票数 1
代码语言:javascript
复制
w_rook_1 = ChessPiece('w_rook_1')
w_knight_1 = ChessPiece('w_knight_1')
w_bishop_1 = ChessPiece('w_bishop_1')
w_king = ChessPiece('w_king')
w_queen = ChessPiece('w_queen')
w_bishop_2 = ChessPiece('w_bishop_2')
w_knight_2 = ChessPiece('w_knight_2')
w_rook_2 = ChessPiece('w_rook_2')
w_pawn_1 = ChessPiece('w_pawn_1')
w_pawn_2 = ChessPiece('w_pawn_2')
w_pawn_3 = ChessPiece('w_pawn_3')
w_pawn_4 = ChessPiece('w_pawn_4')
w_pawn_5 = ChessPiece('w_pawn_5')
w_pawn_6 = ChessPiece('w_pawn_6')
w_pawn_7 = ChessPiece('w_pawn_7')
w_pawn_8 = ChessPiece('w_pawn_8')

有没有更简单的方法来做这件事?我也希望以后能够使用这些对象。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-22 13:56:26

这里有一个简单的方法,在处理这类挑战时使用字典。

我在代码中添加了一些注释,请阅读。

代码语言:javascript
复制
instance_names = ['w_rook_1',
             'w_knight_1',
             'w_bishop_1',
             'w_king',
             'w_queen',
             'w_bishop_2',
             'w_knight_2',
             'w_knight_2']


class ChessPiece(object):

    def __init__(self, name):
        self.name = name
        self.move = "moving {}".format(name)

chess_objs = {}

for obj in instance_names:
    # insert instance names ex. 'w_rook_1' as the key 
    # the ChessPiece instance is set as the value
    chess_objs.setdefault(obj, ChessPiece(obj))

# here just illustrates how to access fields 
# bound to each object
print(chess_objs['w_bishop_1'].name)
print(chess_objs['w_bishop_1'].move)

输出:

代码语言:javascript
复制
w_bishop_1
moving w_bishop_1
票数 2
EN

Stack Overflow用户

发布于 2019-12-22 12:54:55

如果您遵循@kaya3's advice并重新设计您的ChessPiece类,您可以很容易地使用列表理解,如下所示(使用abbreviations

代码语言:javascript
复制
color = 'W'
non_pawns = [ChessPiece(color, c) for c in 'RNBKQBNR']
pawns = [ChessPiece(color, 'P') for _ in range(8)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59441499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档