Почему ссылки на атрибуты действуют так с наследованием Python? [Дубликат]
На этот вопрос уже есть ответ здесь:
Как избежать совместного использования данных классов между экземплярами? 8 ответовСледующее кажется странным. По сути, атрибут somedata кажется общим для всех классов, унаследованных от.the_base_class
class the_base_class:
somedata = {}
somedata['was_false_in_base'] = False
class subclassthing(the_base_class):
def __init__(self):
print self.somedata
first = subclassthing()
{'was_false_in_base': False}
first.somedata['was_false_in_base'] = True
second = subclassthing()
{'was_false_in_base': True}
>>> del first
>>> del second
>>> third = subclassthing()
{'was_false_in_base': True}
определяющийself.somedata
в__init__
Функция, очевидно, является правильным способом обойти это (поэтому у каждого класса естьс собственнымиsomedata
dict) - но когда такое поведение желательно?