Определение класса

Пусть в ходе анализа данной предметной области необходимо определить класс Граф. Граф — это множество вершин и набор ребер, попарно соединяющий эти вершины. Над графом можно проделывать операции, такие как добавление вершины, ребра, проверка наличия ребра в графе и т.п. На языке Python определение класса может выглядеть так:

from sets import Set as set # тип для множества

class G:

 def __init__(self, V, E):

  self.vertices = set(V)

  self.edges = set(E)

 def add_vertex(self, v):

  self.vertices.add(v)

 def add_edge(self, (v1, v2)):

  self.vertices.add(v1)

  self.vertices.add(v2)

  self.edges.add((v1, v2))

 def has_edge(self, (v1, v2)):

  return (v1, v2) in self.edges

 def __str__(self):

  return "%s; %s" % (self.vertices, self.edges)

Использовать класс можно следующим образом:

g = G([1, 2, 3, 4], [(1, 2), (2, 3), (2, 4)])

print g

g.add_vertex(5)

g.add_edge((5,6))

print g.has_edge((1,6))

print g

что даст в результате

Set([1, 2, 3, 4]); Set([(2, 4), (1, 2), (2, 3)])

False

Set([1, 2, 3, 4, 5, 6]); Set([(2, 4), (1, 2), (5, 6), (2, 3)])

Как видно из предыдущего примера, определить класс не так уж сложно. Конструктор класса имеет специальное имя __init__. (Деструктор здесь не нужен, но он бы имел имя __del__.) Методы класса определяются в пространстве имен класса. В качестве первого формального аргумента метода принято использовать self. Кроме методов в объекте класса имеются два атрибута: vertices (вершины) и edges (ребра). Для представления объекта G в виде строки используется специальный метод __str__().

Принадлежность классу можно выяснить с помощью встроенной функции isinstance():

print isinstance(g, G)

Больше книг — больше знаний!

Заберите 30% скидку новым пользователям на все книги Литрес с нашим промокодом

ПОЛУЧИТЬ СКИДКУ