[英]I forgot my basic python skills What am I doing wrong?
我几乎忘记了 python sdince 我有一段时间没有使用它,我无法解决这个看似非常基本的错误。
我正在使用一种非常天真的方法来编写国际象棋引擎,但我无法正确分离类的实例。
在我的代码中:
class Piece:
def __init__(self, name='', symbol='', color='', value=0, position=(0,0)):
self.name=name
self.color=color
...
class Army:
def __init__(self, color="", pieces=[]):
self.color=color
self.pieces=pieces
black=Army()
for rank in range(8):
black.pieces.append(Piece())
black.pieces[rank].color="B"
print(Army().pieces[rank].color)
Output:
B
B
B
B
B
B
B
B
而不是 Piece() 默认的 '' 。 请注意,output 指向 Army() 而不是黑色实例,而 output 将是预期的。
单独的 class 实例不应该采用单独的值吗? 我真的不知道发生了什么事。
我的完整代码是:
class Game:
def __init__(self, name="chess",score=0,board=""):
self.name=name
self.board=board
self.score=score
class Board:
def __init__(self, position="", size=[8,8]):
self.size=size
self.position=position
class Piece:
def __init__(self, name='', symbol='', color='', value=0, position=(0,0)):
# vector=[[0,0],[0,0]])
self.name=name
self.color=color
self.value=value
self.position=position
# self.vector=vector
class Army:
def __init__(self, color="", pieces=[]):
self.color=color
self.pieces=pieces
chess=Game()
chess.name="FIDE"
chess.board=Board()
chess.board.size=[8,8]
checker=Piece()
checker.name="checker"
checker.value=100
checker.vector=(1,0)
black=Army()
black.color="B"
for rank in range(8):
black.pieces.append(Piece())
black.pieces[rank].color="B"
print(Army().pieces)
white=Army()
white.color="W"
for rank in range(8):
white.pieces.append(Piece())
white.pieces[rank].color="W"
print( len(black.pieces))
for ch in white.pieces:
print (ch.color)
print(black)
print(white)
print(len(white.pieces))
print(black.color)
#print (white.pieces.color)
我想那是因为你不应该使用可变列表作为默认值。 Board()
的所有实例都保持对相同size
列表的引用。 所有Army()
实例也使用相同的pieces
列表。
请尝试使用以下描述的方法更新您的代码:
def __init__(self, color="", pieces=[]):
self.pieces = pieces
# ->
def __init__(self, color="", pieces=None):
if pieces is None:
pieces = []
self.pieces = pieces
因此,您将为每个__init__()
调用创建一个新的、单独的列表实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.