Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建输入指定的类_Python_Oop - Fatal编程技术网

Python 创建输入指定的类

Python 创建输入指定的类,python,oop,Python,Oop,我试图创建一个新对象,其中类由用户输入指定。 通过以上代码,我得到: TypeError:“str”对象不可调用 如果输入与类名匹配,我可以通过几个if/elif语句创建所需类的对象来实现所需的结果,但这可能需要12行代码 谢谢 编辑: 以下是“丑陋”的方式: new_piece = input('What would you like to promote your Pawn to? ') if new_piece.capital

我试图创建一个新对象,其中类由用户输入指定。 通过以上代码,我得到:

TypeError:“str”对象不可调用

如果输入与类名匹配,我可以通过几个if/elif语句创建所需类的对象来实现所需的结果,但这可能需要12行代码

谢谢

编辑: 以下是“丑陋”的方式:

                new_piece = input('What would you like to promote your Pawn to? ')
                if new_piece.capitalize() not in ['Queen','Bishop','Knight','Rook']:
                    print('Please choose one of: Queen, Bishop, Knight, or Rook')
                else:
                    if chosen_piece._white:
                        name = new_piece.lower() + 'w' + str(turn)
                    else:
                        name = new_piece.lower() + 'b' + str(turn)
                    for 
                    pieces[name] = new_piece.capitalize()(name, board[chosen_piece._position._name], chosen_piece._white)
                    board[chosen_piece._position._name].square_piece = pieces[name]

如果要基于名称实例化类,可以方便地使用字典作为映射器,其中名称是键,类是值。下面是一个有意简化的示例,以突出该技术

例如:

new_piece = input('What would you like to promote your Pawn to? ')
if new_piece.capitalize() not in ['Queen','Bishop','Knight','Rook']:
    print('Please choose one of: Queen, Bishop, Knight, or Rook')
else:
    if chosen_piece._white:
        name = new_piece.lower() + 'w' + str(turn)
    else:
        name = new_piece.lower() + 'b' + str(turn)
    if new_piece.capitalize() == 'Queen':
        pieces[name] = Queen(name, board[chosen_piece._position._name], chosen_piece._white)
        board[chosen_piece._position._name].square_piece = pieces[name]
        breaker = True
        break
    elif new_piece.capitalize() == 'Bishop':
        pieces[name] = Bishop(name, board[chosen_piece._position._name], chosen_piece._white)
        board[chosen_piece._position._name].square_piece = pieces[name]
        breaker = True
        break
    elif new_piece.capitalize() == 'Knight':
        pieces[name] = Knight(name, board[chosen_piece._position._name], chosen_piece._white)
        board[chosen_piece._position._name].square_piece = pieces[name]
        breaker = True
        break
    elif new_piece.capitalize() == 'Rook':
        pieces[name] = Rook(name, board[chosen_piece._position._name], chosen_piece._white)
        board[chosen_piece._position._name].square_piece = pieces[name]
        breaker = True
        break

这就是全部密码吗?因为代码中甚至有语法错误,大概有400行,所以我只需要输入必要的位。你以前创建过一个名为str的变量吗?现在我可以看到了。
class Queen:
    def __init__(self):
        print("I'm a Queen!")
class King:
    def __init__(self):
        print("I'm a King!")
class Bishop:
    def __init__(self):
        print("I'm a Bishop!")

chess_class_map = {
    "Queen": Queen,
    "King": King,
    "Bishop": Bishop,
}

piece_name = input("Enter chess piece to make: ")

piece_class = chess_class_map.get(piece_name.capitalize())
if piece_class:
    piece = piece_class()
else:
    print(f"Unable to make chess piece: {piece_name}")