def __init__(self, person: Person, role: str, since=None, until=None, *args, **kwargs):
        super(Member, self).__init__(*args, **kwargs)
        self._person = person
        self._since = datetime.now() if until is None else since
        self._until = until

    @property
    def person(self):
        return self._person

    @attribute
    def since(self):
        return self._since

    @attribute
    def until(self):
        return self._until

if __name__ == "__main__":
    todd = Person.__create__(name='Todd',email='*****@*****.**')
    member = Member.__create__(person=todd, role='test')

    other = Person.__create__(name='other',email='*****@*****.**')

    try:
        member.person = other
    except AttributeError as e:
        assert str(e) == 'can\'t set attribute'
    finally: 
        assert member.person is not other
def test_can_add_a_member_to_an_expert():
    ep = ExpertPanel.__create__(name="panel")
    person = Person.__create__(name="tj ward", email="*****@*****.**")
    ep.add_member(Member.__create__(person=person, role='programmer'))

    assert len(ep.members) == 1