我想我对类和实例变量有一些误解。下面是一个例子代码: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