__init__.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import datetime
  2. import typing
  3. class Person:
  4. def __init__(self, identifier: str):
  5. self.identifier: str = identifier
  6. self.name: typing.Optional[str] = None
  7. self.birth_date: typing.Optional[datetime.date] = None
  8. self.mother: typing.Optional["Person"] = None
  9. self.father: typing.Optional["Person"] = None
  10. def __repr__(self) -> str:
  11. """
  12. >>> p = Person("max-mustermann")
  13. >>> repr(p)
  14. 'Person(max-mustermann)'
  15. >>> p.name = "Hr. Mustermann"
  16. >>> repr(p)
  17. 'Person(max-mustermann, Hr. Mustermann)'
  18. >>> p.name = "Max Mustermann"
  19. >>> repr(p)
  20. 'Person(max-mustermann, Max Mustermann)'
  21. >>> p.birth_date = datetime.date(1976, 2, 1)
  22. >>> repr(p)
  23. 'Person(max-mustermann, Max Mustermann, *1976-02-01)'
  24. """
  25. return "{}({})".format(
  26. type(self).__name__,
  27. ", ".join(
  28. filter(
  29. None,
  30. (
  31. self.identifier,
  32. self.name,
  33. "*" + self.birth_date.isoformat()
  34. if self.birth_date is not None
  35. else None,
  36. ),
  37. )
  38. ),
  39. )
  40. def __str__(self) -> str:
  41. """
  42. >>> p = Person("max-mustermann")
  43. >>> p.name = "Max Mustermann"
  44. >>> str(p)
  45. 'Max Mustermann'
  46. >>> p.birth_date = datetime.date(1976, 2, 1)
  47. >>> str(p)
  48. 'Max Mustermann (*1976-02-01)'
  49. """
  50. return (self.name or "unnamed") + (
  51. " (*{})".format(self.birth_date.isoformat()) if self.birth_date else ""
  52. )