在以下代碼的第二行中:studySpell(Confundo()
其中函數studySpell
通過將Confundo
類指定給spell
來創建一個新實例。我的問題是,在執行第二行到最後一行之後,爲什麼spell.incantation
返回'Accio'
?它不應該返回'Confundo'
?python中的類需要指導
class Spell(object):
def __init__(self, incantation, name):
self.name = name
self.incantation = incantation
def __str__(self):
return self.name + ' ' + self.incantation + '\n' + self.getDescription()
def getDescription(self):
return 'No description'
def execute(self):
print(self.incantation)
class Accio(Spell):
def __init__(self):
Spell.__init__(self, 'Accio', 'Summoning Charm')
class Confundo(Spell):
def __init__(self):
Spell.__init__(self, 'Confundo', 'Confundus Charm')
def getDescription(self):
return 'Causes the victim to become confused and befuddled.'
def studySpell(spell):
print(spell)
>>> spell = Accio()
>>> spell.execute()
Accio
>>> studySpell(spell)
Summoning Charm Accio
No description
>>> studySpell(Confundo())
Confundus Charm Confundo
Causes the victim to become confused and befuddled.
>>> print(spell.incantation)
Accio
如果你不明白我的意思,讓我知道我會盡力傳講更多。
爲什麼你認爲調用'studySpell()'會改變'spell'實例? 'spell'仍然是'Accio'的一個實例。 – AChampion
儘管這裏沒有什麼區別,但通常會使用'super()'來調用基類ctors(如果您有鑽石繼承模式,它將會有所不同)。 – thebjorn