python - 在 Python 中编辑实例属性
问题描述
我有一个名为 Player 的 python 类,看起来像这样......
class Player:
def __init__(self):
self.display = 'A'
self.num_water_buckets = 0
self.row = 0
self.col = 0
我在编辑 self.row 和 self.col 时遇到了麻烦……也许它们是不可变的,但我在互联网上没有找到很多。Player().row
并且Player().col
可以工作,但是它们每次都打印 0。我正在尝试使用Player().row = value
where value 是包含数字的变量来编辑它们。
提前致谢!
更新:好的,我知道您必须使用 x = Player() 然后 x.row = ... 定义此实例的新出现
但是我最初需要用某些值(每次都不同)初始化变量,所以我认为我可以使用一个函数,该函数的返回值将设置变量的初始值,但它只会创建一个无限递归。我做了...
class Player:
def __init__(self):
from game_parser import read_lines
self.display = 'A'
self.num_water_buckets = 0
self.row = Player().detRow(sys.argv[1])
self.col = Player().detCol(sys.argv[1])
def detRow(fileName):
# use this function to return the row
def detCol(fileName):
# use this function to return the col
解决方案
如果你这样做
Player().row = value
print(Player().row)
第一Player()
行中的创建一个新实例;然后通过将其row
属性设置为来修改它value
;然后你扔掉那个实例,因为你没有费心在任何地方记住它。然后在下一行中,创建一个新实例(初始化程序将row
属性设置为零)。
并非所有球员都可以互换。如果你让约翰坐在第二排,并不意味着哈利也会坐在第二排;这只是意味着约翰在第二排。
要正确执行此操作,请将您的Player
实例存储在一个变量中:
john = Player()
john.row = 2
print(john.row)
推荐阅读
- rust - 在测试期间使用调试标志编译 rust 依赖项
- python - 为什么我的每个单词反转代码不反转某些单词?
- swift - 通过 mac 应用程序检测/阻止屏幕共享:Swift
- c# - SignalR 可能无法在 .NET 5 中工作?无法解析类型“Microsoft.AspNetCore.SignalR.IHubContext`1[iBet.Server.Hubs.ChatHub]”的服务
- amazon-web-services - 遍历服务器列表并为每个服务器创建警报?
- css - 如何使用反应原生 css 实现与 2 个图标连接的破折号
- python - Python3,构建嵌套字典
- arrays - 在最后一个单词后打印一个数字
- c# - 如何使用 Roslyn 为类中具有特定返回类型的所有属性添加 JsonIgnore 属性?
- django - charfield 的自定义验证器不会引发任何错误