gpt4 book ai didi

python - 我可以动态地将一个类的实例转换为另一个类吗?

转载 作者:IT老高 更新时间:2023-10-28 21:02:06 27 4
gpt4 key购买 nike

我有一个描述棋子的类(class)。我为 Board 中的所有类型 block 都设置了一个类,例如 Pawn、Queen、Keen 等......我在 Pawn 类中遇到问题我想转换为 Queen 或其他具有类的对象(当 pawn 转到第 8 行然后转换为另一个对象时)我该怎么做?

class Pawn:
def __init__(self ,x ,y):
self.x = x
self.y = y
def move(self ,unit=1):
if self.y ==7 :
self.y += 1
what = raw_input("queen/rook/knight/bishop/(Q,R,K,B)?")
# There is most be changed that may be convert to:
# Queen ,knight ,bishop ,rook
if self.y != 2 and unit == 2:
print ("not accesible!!")
elif self.y ==2 and unit == 2:
self.y += 2
elif unit == 1:
self.y += 1
else:
print("can`t move over there")

最佳答案

实际上可以在 Python 中赋值给 self.__class__,但你真的必须知道你在做什么。这两个类必须在某些方面兼容(都是用户定义的类,都是旧式或新式,我不确定 __slots__ 的使用)。此外,如果您执行 pawn.__class__ = Queen,则该 pawn 对象将不会由 Queen 构造函数构造,因此预期的实例属性可能不存在等等。

另一种方法是像这样的复制构造函数:

class ChessPiece(object):
@classmethod
def from_other_piece(cls, other_piece):
return cls(other_piece.x, other_piece.y)

编辑:另见Assigning to an instance's __class__ attribute in Python

关于python - 我可以动态地将一个类的实例转换为另一个类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8062161/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com