def __init__(self, lst, n): self.n = n 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

def __init__(self, lst, n): self.n = n

Поиск

def __init__(self, lst, n): self.n = n

 

self.lst = lst self.current = 0 def __iter__(self):

 

return self def next(self): if self.lst:

 

self.current = (self.current + self.n - 1) % len(self.lst) return self.lst.pop(self.current)

 

else:

raise StopIteration

 

print range(1, 11)

 

for i in Zahlreim(range(1, 11), 5): print i,

 

Программа выдаст

 

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 5 10 6 2 9 8 1 4 7 3

 

В этой программе делегировано управление доступом к элементам списка(или любого другого контейнера,имеющего метод pop(n) для взятия и удаления n-го элемента)классу-итератору.Итератор должен иметь метод next() и возбуждать исключение StopIteration по завершении итераций.Кроме того,метод __iter__() должен выдавать итератор по экземпляру класса(в данном случае итератор-он сам(self)).

 

В настоящее время итераторы приобретают все большее значение,и о них много говорилось в лекции по функциональному программированию.

 

Ассоциация

 

Если в случае агрегации имеется довольно четкое отношение"ИМЕЕТ" (HAS-A)или"СОДЕРЖИТСЯ-В", которое даже отражено в синтаксисе Python:

 

lst = [1, 2, 3]


 


if 1 in lst:

 

...

 

то в случае ассоциации ссылка на экземпляр другого класса используется без отношения включения одного в другой или принадлежности.О таком отношении между классами говорят как об отношенииUSE-A ("ИСПОЛЬЗУЕТ").Это достаточно общее отношение зависимости между классами.

 

В языкеPythonграницы между агрегацией и ассоциацией несколько размыты,так как объекты при агрегации обычно не хранятся в области памяти,выделенной под контейнер(хранятся только ссылки).

 

Объекты могут также ссылаться друг на друга.В этом случае возникают циклические ссылки,которые при неаккуратном использовании могут привести(в старых версияхPython) к утечкам памяти. В новых версиях Python для циклических ссылок работает сборщик мусора.

 

Разумеется,при"чистой"агрегации циклических ссылок не возникает.

 

Например,при представлении дерева ссылки могут идти от родителей к детям и обратно от каждого дочернего узла к родительскому.

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 51; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.156 (0.01 с.)