我是一名正在學習 Python 的學生,想知道如何解決標題中的問題。對于一個專案,我正在創建一個游戲,該游戲使用一個類來存盤不同角色的某些變數。以下是課程的一部分:
class character(object):
def __init__(self, vitality):
self.vitality = vitality
self.stats = f'Vitality: {self.vitality}'
我沒有包括完整的類,因為我有 41 個變數,其中一些基于其他變數的組合,但這是它的要點。
在代碼的后面,我讓用戶選擇一個變數以增加 1 以升級:
levelUpChoice = ''
levelUpChoiceList = ['1', '2', '3', '4', '5', '6', '7']
while levelUpChoice == '':
levelUpChoice = input('What stat would you like to increase?\n1) Vitality\n2) Endurance\n3) Strength\n4) Dexterity\n5) Wisdom\n6) Faith\n7) Luck\n\n > ')
if levelUpChoice not in levelUpChoiceList:
levelUpChoice = ''
print('That is not an accepted response!\nUse a number 1-7.')
if int(levelUpChoice) == 1:
charClass.vitality = 1
但是,當我將“vitality”增加 1 時,名為“stats”的類變數不會更新,即使它是基于它的。正如我兩天前真正了解類以及如何一般使用它們一樣,我不太確定如何處理這個問題,但我需要一個解決方案來使專案具有完整的功能。看到我最重要的類變數取決于我計劃更改的基本變數,我真的需要一個解決方案。
任何提示或建議將不勝感激。
uj5u.com熱心網友回復:
做stats一個財產。這將導致每次訪問它時都會重新計算它。屬性本質上是圍繞方法的語法糖,它使它像任何其他型別的屬性一樣作業——即,self.stats即使它實際上是一個函式呼叫,您也可以將其視為常規字串。
class Character:
def __init__(self, vitality: int):
self.vitality = vitality
@property
def stats(self) -> str:
return f'Vitality: {self.vitality}'
(請注意,object沒有必要顯式繼承自,標準 Python 風格是將類名大寫。)
uj5u.com熱心網友回復:
一些解決方法:
vitality通過 setter更新并更改stats:
class character(object):
def __init__(self, vitality):
self.vitality = vitality
self.stats = f'Vitality: {self.vitality}'
def set_vitality(self, val):
self.vitality = val
self.stats = f'Vitality: {val}'
或者更高級的概念使用 @property
class character(object):
def __init__(self, vitality):
self.vitality = vitality
@property
def stats(self):
return f'Vitality: {self.vitality}'
uj5u.com熱心網友回復:
如果您只需要更新stats屬性,最簡單的選擇可能是將其設為property.
class character(object):
def __init__(self, vitality):
self.vitality = vitality
#Accessed when character.stats is called
#and constructs string at call time
@property
def stats(self):
return f'Vitality: {self.vitality}'
這里有相當詳細的屬性討論:@property 裝飾器如何在 Python 中作業?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/377456.html
上一篇:如何在Pandas中分離字典值?
