web-dev-qa-db-fra.com

Comment documenter: rtype: pour une fonction qui renvoie plusieurs types de données possibles?

Dans un Python docstring comment doit-on documenter le :rtype: pour une fonction qui peut renvoyer plusieurs types de données possibles?

Par exemple, si une fonction peut renvoyer defaultdict OR dict OR list, en fonction de la paramètres des fonctions, comment documentez-vous cela?

Exemple de code:

from collections import defaultdict

def read_state(state_file, state_file_type='defaultdict'):
    """Deserialize state file or create empty state and return it.

    :param state_file: The path and file name of state file to read.
    :type state_file: str
    :param state_file_type: Data type in which state is stored.
    :type state_file_type: str
    :return: Current or new empty state.
    :rtype: ????? 
    """
    if os.path.exists(state_file):
        with open(state_file) as conf_fo:
            state = json.load(conf_fo)
    Elif state_file_type == 'defaultdict':
        state = defaultdict(lambda: defaultdict(list))
    Elif state_file_type == 'dict':
        state = {}
    Elif state_file_type == 'list':
        state = []
    else:
        raise TypeError("State file type not defined.")
    return state
14
stack_lech

Je pense que je viens de me découvrir en tombant sur une question similaire: Comment spécifier plusieurs types de retour en utilisant des indices de type

: rtype: peut être

:rtype: Union[collections.defaultdict, dict, list]
9
stack_lech

Vous pouvez utiliser 'ou' explicitement dans le rtype

:rtype: collections.defaultdict or dict or list

une variante

:rtype: collections.defaultdict | dict | list
13
Marcel Wilson