| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Python: Общие вопросы > Как удалить обьект |
| Автор: HellanD 14.9.2006, 10:01 |
| Задача: Есть класс, создаем обьект этого класа. Фиксируем его создание. И если создастца новый обьект того же класа необходимо просто вывести сообщение "Нельзя создавать два обьекта такого класа" и удалить второй обьект! |
| Автор: slav0nic 14.9.2006, 11:04 | ||
если тру - то потомок ужо есть, если я прально понял вопрос. Тогда удаляй что хошь |
| Автор: Cr@$h 14.9.2006, 11:24 |
| Могу говорить на языке шаблонов. Помести в класс частную (private) статическую переменную -- счётчик. В конструкторе увеличивай её значение, начиная с 0. Если конструктор видит, что она уже равна 1, то генери исключение. При создании экземпляров этого класса всегда лови исключения, обрабатывай их, в смысле. Есть и другой шаблон, создать класс, в него поместить переменную нужного класса, возвращать её через статический метод, который проверяет создана она или нет... Но я запутался немного, может, кто ещё приведёт или додумает. |
| Автор: setq 14.9.2006, 11:53 |
| HellanD, в крайнем случае в качестве уникального объекта можно попробовать использовать модуль. |
| Автор: J2A 14.9.2006, 12:50 | ||||
Пояснения нужны? |
| Автор: setq 14.9.2006, 14:09 |
| J2A, циклическая ссылка, однако. |
| Автор: J2A 14.9.2006, 14:34 |
| В каком месте? |
| Автор: setq 14.9.2006, 15:02 | ||||
|
| Автор: Artemios 15.9.2006, 09:40 |
Таки сам объект-одиночка не удалился, сидит все там же по ссылке Bar._Foo__instance |
| Автор: Artemios 15.9.2006, 10:11 |
| Интересно, а как от Foo наследовать несколько классов, и каждый из которых имел бы своего объекта-одиночку? |
| Автор: HellanD 15.9.2006, 10:51 |
| Cr@$h : Спасибо этот метод мне очень нравиться!!! Но вот что меня беспокоит: "Как на питоне сделать эту частную (private) да еще и статическую переменную -- счётчик Подскажи плиз" |
| Автор: J2A 15.9.2006, 11:52 | ||
Например, __instances -- список дочерних объектов. Если в __instances есть объект текущего класса ([isinstance(x, cls) for x in cls.__instances]),значит ругаться. Если нет -- добавлять в конец списка. |
| Автор: Artemios 19.9.2006, 15:32 | ||
Еще один симпатичный вариант одиночки:
|
| Автор: Artemios 20.9.2006, 08:43 |
| Здесь: http://python.com.ua/doc/object.html нашел немного более подробно об объектах-одиночках, все наши примеры там уже есть |