我想我對類和實例變量有一些誤解。下面是一個例子代碼:Python:理解類和實例變量
class Animal(object):
energy = 10
skills = []
def work(self):
print 'I do something'
self.energy -= 1
def new_skill(self, skill):
self.skills.append(skill)
if __name__ == '__main__':
a1 = Animal()
a2 = Animal()
a1.work()
print a1.energy # result:9
print a2.energy # result:10
a1.new_skill('bark')
a2.new_skill('sleep')
print a1.skills # result:['bark', 'sleep']
print a2.skills # result:['bark', 'sleep']
我認爲energy
和skill
是類變量,因爲我宣佈出來的任何方法。我以相同的方式在方法內修改它的值(在他的聲明中使用self
,可能不正確?)。但結果表明,energy
爲每個對象(如實例變量)取不同的值,而skills
似乎是共享的(就像一個類變量)。我想我已經錯過了一些重要的...
這個問題比重複更微妙的,因爲它問的二級屬性的行爲之間的區別。我相信重複仍然存在,但不是那個。 – BrenBarn
是的,你做到了。能量是不可變的,分配給它取代變量,但是在實例中,只剩下班級。另一方面,你不是在替換技能,而是在課堂上添加共享實例。 –
至於答案,你沒有像你聲稱的那樣「以相同的方式修改數值」。你用'self.energy - = 1'來修改能量,作業;你用'self.skills.append(...)'方法調用修改'skills'。那些是不同的。 – BrenBarn