我认为我对类变量和实例变量有一些误解。这是一个示例代码:
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
对于每个对象都有不同的值(像一个实例变量),而skill
似乎是共享的(像一个类变量)。我认为我错过了一些重要的东西...
self.energy -= 1
这个赋值语句来修改了energy;而使用了self.skills.append(...)
这个方法调用来修改了skills。它们是不同的。 - BrenBarn