在Python中编辑实例属性

问题描述 投票:0回答:1

我有一个叫做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
python class instance
1个回答
1
投票

如果你做

Player().row = value
print(Player().row)

Player() 中创建一个新的实例;然后通过设置它的 row 归于 value;然后你扔掉这个实例,因为你没有费心去记住它。然后在下一行,你创建一个 新的 实例(其中初始化器设置了 row 属性为零)。)

不是所有的球员都可以互换。如果你让John坐在第二排,并不意味着Harry也会坐在第二排,只是意味着John在第二排。

为了正确地进行操作,请将你的 Player 实例中的一个变量。

john = Player()
john.row = 2
print(john.row)

1
投票

你需要把这个变量放在 __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
© www.soinside.com 2019 - 2024. All rights reserved.