myDict
на уровне класса, поэтому, когда Python просматривает экземпляр и не находит его, он ищет дерево наследования, пока не обнаружит. Если вы перепривязываете имя myDict
в любом месте экземпляра, то экземпляр будет иметь свою собственную версию.
Это поведение легко увидеть при использовании изменяемых объектов, таких как dict
, list
и т. Д., Но его сложнее наблюдать с неизменяемыми объектами, такими как str
, int
, tuple
и т. Д., Поскольку чтобы «изменить» значение неизменяемого, вам нужно привязать имя - что-то вроде этого:
class Foo(object):
collection = list()
number = 9
def change_collection(self, new_member):
self.collection.append(new_member)
def change_number(self, new_number):
self.number = new_number
a = Foo()
b = Foo()
a.change_collection('howdy!')
b.change_number(11)
print a.collection, b.collection # ['howdy!] ['howdy!']
print a.number, b.number # 9 11
print a.collection is b.collection # True
print a.number is b.number # False