我有一个叫做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
其中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
属性为零)。)
不是所有的球员都可以互换。如果你让John坐在第二排,并不意味着Harry也会坐在第二排,只是意味着John在第二排。
为了正确地进行操作,请将你的 Player
实例中的一个变量。
john = Player()
john.row = 2
print(john.row)
你需要把这个变量放在 __init__()
办法
EDIT:在类中添加了行和列。
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
产出:
before change: 0
after change: 5
class property: 0