Найти - Пользователи
Полная версия: Помогите решить задачу про класс, который регистрирует свои экземпляры
Начало » Python для новичков » Помогите решить задачу про класс, который регистрирует свои экземпляры
1
MichaelN
Написать класс, который регистрирует свои экземпляры и предоставляет интерфейс итератора по ним
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>
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
MichaelN
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
Спасибо за пример.
Еще вопрос, а без мета классов такое можно сделать?
plastun
Можно без. Например:
for i in Reg._instances:
print i
Как еще - пока не знаю.
MichaelN
plastun
Можно без. Например:
for i in Reg._instances:
print i
Как еще - пока не знаю.
ок, спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB