2017-10-08 93 views
0
class Item(object): 
    def __init__(self, quantity, name, description, effect): #effect is in code and used by the computer, not shown to the player. 
    self.quantity=quantity 
    self.name=name 
    self.description=description 
    self.effect=effect 
def useitem(Item): 
    if Item.quantity>0: 
    Item.quantity-=1 
    Item.effect 

我想使它在使用Item時會觸發某個函數,但我不知道該怎麼做。我正在尋找的東西沿線如何將自定義函數添加到每個對象不同的類中?

bandaid=Item(1, "band-aid", "helps with cuts", health+=20) 

但當然,這是行不通的。 我該怎麼做?

我的編碼知識非常有限,所以如果你能解釋你到底在做什麼,那將是非常好的。

+0

閱讀關於'lambda'的文檔。此外,您還可以使用函數(不帶'()')作爲參數,因爲它們是Python中所有其他對象。 –

+1

只需注意提高可讀性:在操作符之前和之後(例如' - ='),應該有一個空格。 [請參閱空間的PEP 8指南](https://www.python.org/dev/peps/pep-0008/#whitespace-in-expressions-and-statements) – Worm

回答

1
class Item(object): 
    def __init__(self, quantity, name, description, effect): 
     self.name=name 
     self.description=description 
     self.effect= 'self.' + effect 

class Player(): 
    def __init__(self): 
     self.health = 100 
     self.inventory = {} 
    def get_item(self, item): 
     if item in self.inventory: 
      self.inventory[item] += 1 
     else: self.inventory[item] = 1 
    def use_item(self, item): 
     if self.inventory[item] and self.inventory[item] > 0: 
      self.inventory[item]-=1 
      exec(item.effect) 

p1 = Player() 
bandaid=Item(1, "band-aid", "helps with cuts", 'health += 20') 
p1.get_item(bandaid) 
p1.use_item(bandaid) 
print(p1.health) 
+0

我有點迷路。這是怎麼讓我把20增加到「健康」?而且,如果我把它放在'useitem'函數下面,我該如何改變它,例如,一個medkit會將50增加到'health'呢? – sumguy

+0

很可能你會有另一個類,比如'PlayerCharacter',它有一個'health'屬性,而這個類實際上有'acquire_item'和'use item'等方法。然後我們可以繼續實施這些方法。 要產生不同的效果,您只需在'effect'參數中用不同的參數初始化對象。 – 0TTT0

+0

我做了一個函數'Item.useitem',它下面的代碼和post中的'use(self)'相同。然而,當我運行它時,「健康」沒有改變(它在10點,在使用後保持在10點)。你能解釋一下這個效應如何作用於變量'健康'作爲一個字符串? – sumguy

相關問題