|
@@ -0,0 +1,54 @@
|
|
|
+import datetime
|
|
|
+import typing
|
|
|
+
|
|
|
+
|
|
|
+class Person:
|
|
|
+ def __init__(self, identifier: str):
|
|
|
+ self.identifier: str = identifier
|
|
|
+ self.name: typing.Optional[str] = None
|
|
|
+ self.birth_date: typing.Optional[datetime.date] = None
|
|
|
+
|
|
|
+ def __repr__(self) -> str:
|
|
|
+ """
|
|
|
+ >>> p = Person("max-mustermann")
|
|
|
+ >>> repr(p)
|
|
|
+ 'Person(max-mustermann)'
|
|
|
+ >>> p.name = "Hr. Mustermann"
|
|
|
+ >>> repr(p)
|
|
|
+ 'Person(max-mustermann, Hr. Mustermann)'
|
|
|
+ >>> p.name = "Max Mustermann"
|
|
|
+ >>> repr(p)
|
|
|
+ 'Person(max-mustermann, Max Mustermann)'
|
|
|
+ >>> p.birth_date = datetime.date(1976, 2, 1)
|
|
|
+ >>> repr(p)
|
|
|
+ 'Person(max-mustermann, Max Mustermann, *1976-02-01)'
|
|
|
+ """
|
|
|
+ return "{}({})".format(
|
|
|
+ type(self).__name__,
|
|
|
+ ", ".join(
|
|
|
+ filter(
|
|
|
+ None,
|
|
|
+ (
|
|
|
+ self.identifier,
|
|
|
+ self.name,
|
|
|
+ "*" + self.birth_date.isoformat()
|
|
|
+ if self.birth_date is not None
|
|
|
+ else None,
|
|
|
+ ),
|
|
|
+ )
|
|
|
+ ),
|
|
|
+ )
|
|
|
+
|
|
|
+ def __str__(self) -> str:
|
|
|
+ """
|
|
|
+ >>> p = Person("max-mustermann")
|
|
|
+ >>> p.name = "Max Mustermann"
|
|
|
+ >>> str(p)
|
|
|
+ 'Max Mustermann'
|
|
|
+ >>> p.birth_date = datetime.date(1976, 2, 1)
|
|
|
+ >>> str(p)
|
|
|
+ 'Max Mustermann (*1976-02-01)'
|
|
|
+ """
|
|
|
+ return (self.name or "unnamed") + (
|
|
|
+ " (*{})".format(self.birth_date.isoformat()) if self.birth_date else ""
|
|
|
+ )
|