Python 创建输入指定的类
我试图创建一个新对象,其中类由用户输入指定。 通过以上代码,我得到: TypeError:“str”对象不可调用 如果输入与类名匹配,我可以通过几个if/elif语句创建所需类的对象来实现所需的结果,但这可能需要12行代码 谢谢 编辑: 以下是“丑陋”的方式: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
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}")