|
@@ -95,3 +95,40 @@ class Person:
|
|
for attr in ["name", "birth_date", "mother", "father"]:
|
|
for attr in ["name", "birth_date", "mother", "father"]:
|
|
if getattr(person, attr) is not None:
|
|
if getattr(person, attr) is not None:
|
|
setattr(self, attr, getattr(person, attr))
|
|
setattr(self, attr, getattr(person, attr))
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class PersonCollection:
|
|
|
|
+ def __init__(self):
|
|
|
|
+ self._persons = {}
|
|
|
|
+
|
|
|
|
+ def __getitem__(self, identifier: str) -> Person:
|
|
|
|
+ """
|
|
|
|
+ >>> c = PersonCollection()
|
|
|
|
+ >>> c.add_person(Person("alice"))
|
|
|
|
+ Person(alice)
|
|
|
|
+ >>> c["alice"]
|
|
|
|
+ Person(alice)
|
|
|
|
+ """
|
|
|
|
+ return self._persons[identifier]
|
|
|
|
+
|
|
|
|
+ def add_person(self, person: Person) -> Person:
|
|
|
|
+ """
|
|
|
|
+ >>> c = PersonCollection()
|
|
|
|
+ >>> c.add_person(Person("alice"))
|
|
|
|
+ Person(alice)
|
|
|
|
+ >>> c.add_person(Person("bob"))
|
|
|
|
+ Person(bob)
|
|
|
|
+ >>> c["bob"]
|
|
|
|
+ Person(bob)
|
|
|
|
+
|
|
|
|
+ >>> bob = Person("bob")
|
|
|
|
+ >>> bob.birth_date = datetime.date(2010, 2, 3)
|
|
|
|
+ >>> c.add_person(bob)
|
|
|
|
+ Person(bob, *2010-02-03)
|
|
|
|
+ """
|
|
|
|
+ if person.identifier not in self._persons:
|
|
|
|
+ self._persons[person.identifier] = person
|
|
|
|
+ return person
|
|
|
|
+ existing_person = self._persons[person.identifier]
|
|
|
|
+ existing_person.merge(person)
|
|
|
|
+ return existing_person
|