support initialisation by keyword arguments