Недавно обнаружил интересную особенность при работе с классами и словарями в питоне, не видел нигде в документации описание этого,
очень забавная “фича” граничищая с багом :)
Если кто знает, где в документации про это написано и почему оно работает “так” пожалуйста напишите :)
есть вот такой код:
#————————
class MyClass :
var1 = ‘1’
var2 = {'1':'1'}
var3 = {'1':'1'}
def __init__( self ) :
self.var3 = {}
def f1( self ) :
self.var1 = ‘2’
self.var2 = ‘2’
self.var3 = ‘2’
def p1() :
obj = MyClass()
print obj.var1
print obj.var2
print obj.var3
print ‘———————-’
obj.f1()
p1()
p1()
#————————
Запускаем:
1
{'1': ‘1’}
{}
———————-
1
{'1': ‘1’, ‘2’: ‘2’}
{}
———————-
Смотрим внимательно какое значение вывелось у переменной var2 на втором вызове p1()
Я бы все понял, если бы и var1 была равна ‘2’, тогда я бы сказал что это просто “классовые” переменные… (хотя ясен перец что это абсурд для питона)
Но ведь она равна ‘1’, что говорит о том что это все-таки переменные экземпляра класса…
Вобщем хотелось-бы услышать, что кто думает по этому поводу, ибо я так сказать в легком недоумении :)
на всякий случай у меня: Python 2.6.4 (r264:75706, Apr 8 2010, 09:36:32)
PS: с питоном уже 8 лет дружу, но то-ли до этого всегда инициализировал в конструкторе все словари, то-ли лыжи :)