Мне нужна помощь в написании кода, который делает то, что я думаю, что он должен делать.Переменные экземпляра и класса
Вот код:
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
Это последний результат, который ставит меня в тупик. Если я правильно назвал «добрый» атрибут класса, то, когда я изменил его в классе с помощью «Food.kind =», он должен изменить его для обоих экземпляров. Фактически я ожидал, что он изменится, когда я дам ему новое значение через один из экземпляров, но он только изменил его в одном. Что мне здесь не хватает?
Проверьте следующей ссылке: http://www.toptal.com/python/python-class-attributes-an-overly- тщательный путеводитель. В нем объясняется, как атрибуты класса и атрибуты экземпляра работают в Python. – mvillaress
Пока вы не назначили 'a.kind = 'veg'', атрибут' kind' не существует в экземпляре и ссылается на переменную класса. Если вы хотите, чтобы он возвращался обратно к переменной класса, тогда 'del a.kind', и вы снова получите« мясо »для обоих. – sberry