web-dev-qa-db-fra.com

Tapez les indices dans namedtuple

Considérons le morceau de code suivant:

from collections import namedtuple
point = namedtuple("Point", ("x:int", "y:int"))

Le code ci-dessus n’est qu’un moyen de démontrer ce que j’essaie de réaliser. Je voudrais faire namedtuple avec des conseils de type.

Savez-vous de manière élégante comment atteindre le résultat escompté?

86
Pavel Hanpari

La syntaxe préférée pour un type nommé Tuple depuis 3.6 est

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int = 1  # Set default value

Point(3)  # -> Point(x=3, y=1)

Éditer En commençant Python 3.7, envisagez d'utiliser dataclasses (votre = IDE peut ne pas encore les prendre en charge pour la vérification de type statique):

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int = 1  # Set default value

Point(3)  # -> Point(x=3, y=1)
83
Wolfgang Kuehn

Vous pouvez utiliser typing.NamedTuple

De la docs

Version typée de namedtuple.

>>> import typing
>>> Point = typing.NamedTuple("Point", [('x', int), ('y', int)])

Ceci est présent uniquement dans Python 3.5 et versions ultérieures

87
Bhargav Rao