2013-07-12 6 views
0

Кажется, что их единственное значение - сохранение атрибутов. Даже тогда они не могут быть изменены или изменения отражаются во всех случаях!Что хорошего в классах python?

Если у меня есть класс здесь:

# Vertex 
class Vertex: 
    label = str() 
    ID = int() 
    outEdges = list() 
    inEdges = list() 

сделать новый объект вершинного:

v = Vertex() 

и добавить к V в немного опережает:

v.outEdges.append(1) 

затем Vertex.outEdges больше не является пустым списком, но также содержит 1.

Как я могу использовать классы python? С модулем копирования? Не за что?

+2

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

+2

Атрибуты класса отражаются во всех экземплярах. – Matthias

ответ

6

Атрибуты, которые вы объявляете, являются классами и совместно используются всеми экземплярами класса. Вы должны использовать правильную функцию инициализатор/конструктора, если вы хотите, чтобы эти значения, чтобы быть специфическими для экземпляра:

# Vertex 
class Vertex: 
    def __init__(self): 
     self.label = str() 
     self.ID = int() 
     self.outEdges = list() 
     self.inEdges = list() 

Вы также можете создать методы классов, а не только атрибуты.

class Vertex: 
    # def __init__(self): ... 

    def allEdges(self): 
     return self.outEdges + self.inEdges 
+0

Отлично, спасибо. Хорошо знать. – NargothBond

2

Если вам нужны разные экземпляры класса, вам понадобится instantiation method.

class Vertex: 
    def __init__(self): 
     self.label = str() 
     .... 
1

[..] изменения будут отражаться во всех случаях!

Если вы определяете атрибуты, как и вы, они будут вести себя как статические атрибуты, общие для всех экземпляров данного класса.

Если вы хотите получить экземпляры данного класса, которые не разделяют значение атрибутов вам нужно определить это так:

# Vertex 
class Vertex: 
    def __init__(self): 
     self.label = str() 
     self.ID = int() 
     outEdges = list() 
     inEdges = list() 
Смежные вопросы