Проблема с наследованием Python - PullRequest
4 голосов
/ 15 мая 2011

Код, с которым у меня на самом деле проблема, очень длинный, поэтому я сделал пример, который отображает мою проблему.

У меня есть два класса, которые наследуются от базового класса ( BaseClass ).Оба эти класса добавляют некоторые элементы к self.Dict .Тем не менее, они, кажется, пересекают элементы загрязнения.Я ожидал, что c0.Dict вернет {'class0': 0} и c1.Dict вернет {'class1': 1} .Однако они оба возвращают {'class0': 0, 'class1': 1} .Почему они перекрестно загрязняют?

class BaseClass :
    def __init__ (self, _dict={}) :
        self.Dict = _dict

class Class0 (BaseClass) :
    def __init__ (self) :
        BaseClass.__init__(self)
        self.Dict['class0'] = 0

class Class1 (BaseClass) :
    def __init__ (self) :
        BaseClass.__init__(self)
        self.Dict['class1'] = 1

c0 = Class0()
c1 = Class1()

print c0.Dict
print c1.Dict 

1 Ответ

9 голосов
/ 15 мая 2011

Вы попали в python gotcha: изменяемые аргументы по умолчанию.

http://blog.objectmentor.com/articles/2008/05/22/pythons-mutable-default-problem

class BaseClass :
    def __init__ (self, _dict=None) :
        self.Dict = _dict or {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...