class IterPerson(type):
def __new__ (cls, name, bases, dct):
dct['_instances'] = []
return super().__new__(cls, name, bases, dct)
def __call__(cls, *args, **kwargs):
instance = super().__call__(*args, **kwargs)
cls._instances.append(instance)
return instance
def __iter__(cls):
return iter(cls._instances)
class Person(metaclass=IterPerson):
def __init__(self, name, age, height):
self.name = name
self.age = age
self.height = height
if __name__ == '__main__':
Jeff = Person("Jeff", 20, "1.6")
Bob = Person("Bob", 39, "1.4")
Helen = Person("Helen", 19, "1.3")
for person in Person:
print(person.name, "is", person.age)
Y2xhc3MgSXRlclBlcnNvbih0eXBlKToKICAgIGRlZiBfX25ld19fIChjbHMsIG5hbWUsIGJhc2VzLCBkY3QpOgogICAgICAgIGRjdFsnX2luc3RhbmNlcyddID0gW10KICAgICAgICByZXR1cm4gc3VwZXIoKS5fX25ld19fKGNscywgbmFtZSwgYmFzZXMsIGRjdCkKCiAgICBkZWYgX19jYWxsX18oY2xzLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIGluc3RhbmNlID0gc3VwZXIoKS5fX2NhbGxfXygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgY2xzLl9pbnN0YW5jZXMuYXBwZW5kKGluc3RhbmNlKQogICAgICAgIHJldHVybiBpbnN0YW5jZQoKICAgIGRlZiBfX2l0ZXJfXyhjbHMpOgogICAgICAgIHJldHVybiBpdGVyKGNscy5faW5zdGFuY2VzKQoKCmNsYXNzIFBlcnNvbihtZXRhY2xhc3M9SXRlclBlcnNvbik6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgYWdlLCBoZWlnaHQpOgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLmFnZSA9IGFnZQogICAgICAgIHNlbGYuaGVpZ2h0ID0gaGVpZ2h0CgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIEplZmYgPSBQZXJzb24oIkplZmYiLCAyMCwgIjEuNiIpCiAgICBCb2IgPSBQZXJzb24oIkJvYiIsIDM5LCAiMS40IikKICAgIEhlbGVuID0gUGVyc29uKCJIZWxlbiIsIDE5LCAiMS4zIikKCiAgICBmb3IgcGVyc29uIGluIFBlcnNvbjoKICAgICAgICBwcmludChwZXJzb24ubmFtZSwgImlzIiwgcGVyc29uLmFnZSk=