2014-01-11 3 views
2

Я пытаюсь создать метод, который позволяет каждому экземпляру класса быть «соседями» друг от друга. Если Entity A добавляет B в качестве соседа, то B находится в A neigh_list. Однако, как видно из приведенного ниже результата, B автоматически добавляется в список соседей B, и это не является желаемым поведением - список соседей B должен быть пустым. Есть предположения?Добавление списка в Python

Выход:

a's neighbor list element: b 
b's neighbor list element: b 

Код:

class Entities: 
    neighbor_list = [] 
    name = '' 

    def __init__(self,name): 
     self.name = name 

    def add (self, neighbor): 
     self.neighbor_list.append(neighbor) 

a = Entities ('a') 
b = Entities ('b') 
a.add(b) 
print "a's neighbor list element: %s" % a.neighbor_list[0].name 
print "b's neighbor list element: %s" % b.neighbor_list[0].name 
+2

Почему вас удивляет, что мутация атрибута класса означает, что все экземпляры могут видеть мутацию? –

+1

@ IgnacioVazquez-Abrams: Вероятно, это его удивляет тем, что 'neighbour_list'_is_ является членом класса, а не членом экземпляра, потому что он предположил, что Python сделал члены точно так же, как, например, Java. – abarnert

ответ

6

Сделать neighbor_list экземпляр, а не класс, атрибут:

class Entities(object): 
    # not here 
    def __init__(self, name): 
     self.name = name 
     self.neighbor_list = [] # here 

атрибутов класса, определенный вне методов экземпляра, являются общими всеми экземплярами класса.

+0

большое спасибо. :) – user3183900

Смежные вопросы