Code re-use best practices in Panel

I am having a hard time with code re-use in Panel. Consider the following trivial example has a repeated pane (info_card) of employee information per employee. Additionally, I have a global widget (date_widget) on which all employee cards rely. The only difference between info_card1 and info_card2 is static information about the specific employee.

import panel as pn
pn.extension()
import datetime as dt

# Global Widget
date_widget = pn.widgets.DatePicker(name='Pick a day', value=dt.date.today())

@pn.depends(date_widget.param.value)
def info_card1(date_widget):
    # The only difference between info_cards is this static info
    name='John'
    sex='M'
    bday=dt.date(2021,5,1)
    
    # Component Specific widget
    show_gender = pn.widgets.Checkbox(name='Show Gender', value=False)
    
    # Component Specific Display
    @pn.depends(show_gender.param.value)
    def display(gender):
        return pn.Card(
            f'Name: {name}',
            f'Next Birthday: {(bday - date_widget).days} days',
            f'Gender: {sex if gender else "X"}',
            show_gender)
    return display

@pn.depends(date_widget.param.value)
def info_card2(date_widget):
    # The only difference between info_cards is this static info
    name='Chelsea'
    sex='F'
    bday=dt.date(2021,7,21)
    
    # Component Specific widget
    show_gender = pn.widgets.Checkbox(name='Show Gender', value=False)
    
    # Component Specific Display
    @pn.depends(show_gender.param.value)
    def display(gender):
        return pn.Card(
            f'Name: {name}',
            f'Next Birthday: {(bday - date_widget).days} days',
            f'Gender: {sex if gender else "X"}',
            show_gender)
    return display

# Global display
pn.Column(
    pn.Row('Global Widget:', date_widget),
    pn.Row(info_card1, info_card2)
).servable()

Clearly, this solution is wanting for some code re-use. What is the best way to to consolidate the info_pane into a single reusable component?

I think I just figured out a solution using functools.partial. Is this a best practice worthy of the docs or is there a better approach?

import panel as pn
pn.extension()
import datetime as dt
from functools import partial

# Global Widget
date_widget = pn.widgets.DatePicker(name='Pick a day', value=dt.date.today())

def info_card(date_widget, name, sex, bday):     
    # Component Specific widget
    show_gender = pn.widgets.Checkbox(name='Show Gender', value=False)
    
    # Component Specific Display
    @pn.depends(show_gender.param.value)
    def display(gender):
        return pn.Card(
            f'Name: {name}',
            f'Next Birthday: {(bday - date_widget).days} days',
            f'Gender: {sex if gender else "X"}',
            show_gender)
    return display

info_card1 = pn.depends(date_widget.param.value)(partial(info_card, name='John', sex='M', bday=dt.date(2021,7,21)))
info_card2 = pn.depends(date_widget.param.value)(partial(info_card, name='Chelsea', sex='F', bday=dt.date(2021,5,1)))


pn.Column(
    pn.Row('Global Widget:', date_widget),
    pn.Row(info_card1, info_card2)
).servable()