__init__.py 1.6 KB

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