[英]Editing Instance Attributes in Python
我有一个名为 Player 的 python class 看起来像这样......
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
编辑它们,其中 value 是一个包含数字的变量。
提前致谢!
更新:好的,所以我知道您必须使用 x = Player() 然后 x.row =... 定义此实例的新出现
但我最初需要用某些值(每次都不同)初始化变量,所以我想我可以使用 function 和 function 的返回值将设置变量的初始值,但它只会创建无限递归。 我做了...
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)
您需要将变量添加到__init__()
方法之外
编辑:将行和列添加到 class
class Player:
row = 0 # NO self here
col = 0
def __init__(self):
self.display = 'A'
self.num_water_buckets = 0
john = Player()
john.num_water_buckets = 12
print(f'before change: {john.col}')
john.col = 5
print(f'after change: {john.col}')
print(f'class property: {Player.col}') # note it did not change the class
Output:
before change: 0
after change: 5
class property: 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.