Хорошо, так что весь день меня гасили.Странная проблема с классами и дополнительными аргументами
Почему это происходит:
class Foo:
def __init__(self, bla = {}):
self.task_defs = bla
def __str__(self):
return ''.join(str(self.task_defs))
a = Foo()
b = Foo()
a.task_defs['BAR'] = 1
print 'B is ==> %s' % str(b)
print 'A is ==> %s' % str(a)
дает мне выход:
B is ==> {'BAR': 1}
A is ==> {'BAR': 1}
Я знаю, что он должен делать с питоном передавая все по ссылке.
Но почему это происходит? Это буквально заставляло меня сходить с ума весь день, в основном заставляя меня разрывать мои вещи. Разве питон не должен быть достаточно умным, чтобы иметь дело с чем-то подобным?
Следует ли считать это обманом? Было много вопросов/проблем, которые люди использовали на основе используемого по умолчанию изменяемого типа данных. –
Вот один, всего час назад: http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument –
Просто в стороне: нет необходимости в '' '. join' строка (вы создаете одну строку с вызовом 'str'). – cdleary