我有一個 python 的作業植入,它有一些內置的對話框,所以我不能在這里分享原始代碼。我遇到的問題是我想更新某些實體屬性的值。我通過將 2 個串列壓縮在一起制作了一個字典,以便在 for 回圈中我可以向用戶提及他們需要查看的字串(字典鍵),我想要更改的實體屬性是值字典里的。但它所做的只是改變字典值,而不是實體屬性值。
該對話框將詢問用戶“您要更改 json 檔案中的 {x 中繼名稱}嗎?”。字典中與該名稱關聯的值是要更新的實體屬性。
所以不知道能不能實作。如果可以的話,有人有任何想法嗎?
在良好的評論清楚地表明問題被誤寫后更新了問題。
代碼
class MyClass:
def __init__(self):
self.x = 10.0
self.y = 20.0
def get_user_input(self):
usr_ret = input("input a number :")
return usr_ret
if __name__ == "__main__":
m = MyClass()
print(m.x)
list_a = ["x_related_name", "y_related_name"]
list_b = [m.x, m.y]
mydict = dict(zip(list_a, list_b))
for k, v in mydict.items():
print(k, " : ", v)
# update the class attribute value
for k, v in mydict.items():
#Can I update the class attributes x and y in a loop?
uj5u.com熱心網友回復:
你想要getattr和setattr嗎?在下面,我簡化了示例,因為我找不到您的示例中使用用戶輸入的位置。
getattr根據屬性名稱獲取屬性值,并setattr為指定的屬性設定值(再次根據其名稱)。因此,您只需將屬性名稱存盤在字串串列中,并根據需要在串列上回圈。
class MyClass:
def __init__(self):
self.x = 10.0
self.y = 20.0
if __name__ == "__main__":
m = MyClass()
attrs = ['x', 'y']
for a in attrs:
print(f"{a}: {getattr(m, a)}")
set_as = [42, 2021]
for a, v in zip(attrs, set_as):
setattr(m, a, v)
for a in attrs:
print(f"{a}: {getattr(m, a)}")
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/329040.html
