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 "" )