簡體   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