我需要编写代码的帮助,这些代码完成我认为应该完成的任务。实例和类变量
下面的代码:
class Food:
kind = 'fruit'
def __init__(self, name):
self.name = name
a = Food('tomato')
b = Food('cabbage')
print 'a ->', a.kind
print 'b ->', b.kind
print 'change a\'s kind'
a.kind = 'veg'
print 'a ->', a.kind
print 'b ->',b.kind
print 'change kind in the class'
Food.kind = 'meat'
print 'a ->', a.kind
print 'b ->', b.kind
我得到的输出是这样的:
a -> fruit
b -> fruit
change a's kind
a -> veg
b -> fruit
change kind in the class
a -> veg
b -> meat
这是困扰我的最后一个结果。如果我已经将'kind'正确地声明为class属性,那么肯定当我在'Food.kind ='类中改变它时,它应该改变它的两个实例。实际上,当我通过其中一个实例赋予它新的价值时,我预期它会改变,但它只是将它改变为一个。我在这里错过了什么?
检查下一个环节:http://www.toptal.com/python/python-class-attributes-an-overly-彻底指导。它解释了类属性和实例属性如何在Python中工作。 – mvillaress 2014-09-30 21:46:21
在分配'a.kind ='veg''之前,'kind'属性在实例中不存在,并且引用类变量。如果你想让它重新返回到类变量,那么'del a.kind',你将再次获得'meat'。 – sberry 2014-09-30 21:53:38