我想我对类和实例变量有一些误解。这是一个示例代码:
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
似乎是共享的(如类变量)。我想我错过了一些重要的事情......
最佳答案
这里的诀窍在于了解 self.energy -= 1
的作用。这真的是两种表达方式;一个获取 self.energy - 1
的值,另一个将其分配回 self.energy
。
但让您感到困惑的是,在该分配的两侧,引用的解释方式不同。当 Python 被告知要获取 self.energy
时,它会尝试在实例上找到该属性,但失败了,然后回退到类属性。但是,当它分配给 self.energy
时,它总是会分配给一个实例属性,即使它以前不存在。
关于Python:理解类和实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35766834/