Попробуйте это, может быть полезным... http://www.ubuntuupdates.org/package/core/precise/universe/base/ekiga-dbg
props
не должно иметь такого значения по умолчанию. Вместо этого сделайте следующее:
class a(object):
def __init__(self, props=None):
if props is None:
props = {}
self.props = props
Это обычный питон "gotcha" .
Ваша проблема заключается в этой строке:
def __init__(self, props={}):
{} - изменяемый тип. А в Python значения аргументов по умолчанию оцениваются только один раз. Это означает, что все ваши экземпляры используют один и тот же объект словаря!
Чтобы исправить это, измените его на:
class a(object):
def __init__(self, props=None):
if is None:
props = {}
self.props = props
Краткая версия: Сделайте это:
class a(object):
def __init__(self, props=None):
self.props = props if props is not None else {}
class b(a):
def __init__(self, val = None):
super(b, self).__init__()
self.props.update({'arg': val})
class c(b):
def __init__(self, val):
super(c, self).__init__(val)
Длинная версия:
Определение функции оценивается ровно один раз, поэтому каждый раз, когда вы вызываете ее, используется один и тот же аргумент по умолчанию. Чтобы это работало так, как вы ожидали, аргументы по умолчанию должны оцениваться каждый раз при вызове функции. Но вместо этого Python генерирует объект функции один раз и добавляет ему значения по умолчанию (как func_obj.func_defaults
)