繁体   English   中英

在 Python 中编辑实例属性

[英]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().rowPlayer().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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM