Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 12, 2011 13:21:42

MichaelN
От:
Зарегистрирован: 2011-04-02
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите решить задачу про класс, который регистрирует свои экземпляры

Написать класс, который регистрирует свои экземпляры и предоставляет интерфейс итератора по ним
1.
2. >>> x = Reg()
3. >>> x
4. <Reg instance at 0x98b6ecc>
5. >>> y = Reg()
6. >>> y
7. <Reg instance at 0x98b6fec>
8. >>> z = Reg()
9. <Reg instance at 0x98ba02c>
10. >>> for i in Reg:
11. … print i
12. <Reg instance at 0x98b6ecc>
13. <Reg instance at 0x98b6fec>
<Reg instance at 0x98ba02c>



Офлайн

#2 Дек. 12, 2011 15:20:01

plastun
От:
Зарегистрирован: 2011-01-18
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите решить задачу про класс, который регистрирует свои экземпляры

class IterReg(type):
def __iter__(cls):
return iter(cls._instances)


class Reg(object):
_instances = []
__metaclass__ = IterReg

def __new__(cls, *args, **kwargs):
instance = super(Reg, cls).__new__(cls, *args, **kwargs)
cls._instances.append(instance)
return instance


r1 = Reg()
print r1
r2 = Reg()
print r2
print 'iterate:'
for i in Reg:
print i



Офлайн

#3 Дек. 12, 2011 15:35:28

MichaelN
От:
Зарегистрирован: 2011-04-02
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите решить задачу про класс, который регистрирует свои экземпляры

plastun
class IterReg(type):
def __iter__(cls):
return iter(cls._instances)


class Reg(object):
_instances = []
__metaclass__ = IterReg

def __new__(cls, *args, **kwargs):
instance = super(Reg, cls).__new__(cls, *args, **kwargs)
cls._instances.append(instance)
return instance


r1 = Reg()
print r1
r2 = Reg()
print r2
print 'iterate:'
for i in Reg:
print i
Спасибо за пример.
Еще вопрос, а без мета классов такое можно сделать?



Офлайн

#4 Дек. 12, 2011 17:28:18

plastun
От:
Зарегистрирован: 2011-01-18
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите решить задачу про класс, который регистрирует свои экземпляры

Можно без. Например:

for i in Reg._instances:
print i
Как еще - пока не знаю.



Офлайн

#5 Дек. 13, 2011 08:51:08

MichaelN
От:
Зарегистрирован: 2011-04-02
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите решить задачу про класс, который регистрирует свои экземпляры

plastun
Можно без. Например:
for i in Reg._instances:
print i
Как еще - пока не знаю.
ок, спасибо.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version