如何解决继承的Python类的属性系统
class Board:
array = [[" "," "," "],[" "," "]]
def reset(self):
self.array = [[" "," "]]
class AI(Board):
def __init__(self):
self.array[0][0] = "X"
ai = AI()
board = Board()
print(ai.array) # [['X',' ',' '],[' ',' ']]
print(board.array) # [['X',' ']]
ai.reset()
print(ai.array) # [[' ',' ']]
我的问题是,为什么ai.array更改了board.array。如果它们相互连接,为什么在运行属于AI的方法时两个属性都不能一起更改。
解决方法
这可以通过以下方式理解:
-
当您获取
self.array
以进行使用或修改时,如表达式self.array[0][0] = "X"
所示,- 首先检查实例以查看其是否具有这种属性;
- 如果没有,则检查实例类型的属性。
(这是发生的事情的简化,但您需要了解的所有情况)
- 设置实例时,就像在表达式
self.array = [...]
中所做的那样,您直接在实例 上设置属性
在您的示例代码中:
print(ai.array) # ai does not have an array,Board.array is returned
print(board.array) # board does not have an array,Board.array is returned
ai.reset() # this adds an attribute to ai
print(ai.array) # ai **does** have an array,it is returned
print(board.array) # board does not have an array,Board.array is returned
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。