![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| HellanD |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 443 Регистрация: 16.5.2006 Где: Киев Репутация: 1 Всего: 2 |
Задача:
Есть класс, создаем обьект этого класа. Фиксируем его создание. И если создастца новый обьект того же класа необходимо просто вывести сообщение "Нельзя создавать два обьекта такого класа" и удалить второй обьект! |
|||
|
||||
| slav0nic |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.5.2006 Репутация: 4 Всего: 5 |
если тру - то потомок ужо есть, если я прально понял вопрос. Тогда удаляй что хошь --------------------
python.com.ua |
|||
|
||||
| Cr@$h |
|
|||
![]() Исследователь ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1693 Регистрация: 3.4.2005 Где: Санкт-Петербург, Россия Репутация: 1 Всего: 41 |
Могу говорить на языке шаблонов. Помести в класс частную (private) статическую переменную -- счётчик. В конструкторе увеличивай её значение, начиная с 0. Если конструктор видит, что она уже равна 1, то генери исключение. При создании экземпляров этого класса всегда лови исключения, обрабатывай их, в смысле.
Есть и другой шаблон, создать класс, в него поместить переменную нужного класса, возвращать её через статический метод, который проверяет создана она или нет... Но я запутался немного, может, кто ещё приведёт или додумает. Это сообщение отредактировал(а) Cr@$h - 14.9.2006, 11:26 |
|||
|
||||
| setq |
|
|||
|
Unregistered |
HellanD, в крайнем случае в качестве уникального объекта можно попробовать использовать модуль.
|
|||
|
||||
| J2A |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 17.11.2005 Где: Омск Репутация: 16 Всего: 18 |
Пояснения нужны? --------------------
Be easy, stay cool |
||||
|
|||||
| setq |
|
|||
|
Unregistered |
J2A, циклическая ссылка, однако.
|
|||
|
||||
| J2A |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 17.11.2005 Где: Омск Репутация: 16 Всего: 18 |
В каком месте?
--------------------
Be easy, stay cool |
|||
|
||||
| setq |
|
||||
|
Unregistered |
|
||||
|
|||||
| Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: 18 Всего: 50 |
Таки сам объект-одиночка не удалился, сидит все там же по ссылке Bar._Foo__instance Это сообщение отредактировал(а) Artemios - 15.9.2006, 09:47 -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
| Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: 18 Всего: 50 |
Интересно, а как от Foo наследовать несколько классов, и каждый из которых имел бы своего объекта-одиночку?
-------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
| HellanD |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 443 Регистрация: 16.5.2006 Где: Киев Репутация: 1 Всего: 2 |
Cr@$h :
Спасибо этот метод мне очень нравиться!!! Но вот что меня беспокоит: "Как на питоне сделать эту частную (private) да еще и статическую переменную -- счётчик Подскажи плиз" |
|||
|
||||
| J2A |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 17.11.2005 Где: Омск Репутация: 16 Всего: 18 |
Например, __instances -- список дочерних объектов. Если в __instances есть объект текущего класса ([isinstance(x, cls) for x in cls.__instances]),значит ругаться. Если нет -- добавлять в конец списка. --------------------
Be easy, stay cool |
|||
|
||||
| Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: 18 Всего: 50 |
Еще один симпатичный вариант одиночки:
-------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
| Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: 18 Всего: 50 |
Здесь: http://python.com.ua/doc/object.html нашел немного более подробно об объектах-одиночках, все наши примеры там уже есть
-------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Python: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |