名前付きタプルにヒントを入力する


127

次のコードを検討してください。

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

上記のコードは、私が達成しようとしていることを示すための方法にすぎません。namedtupleタイプヒントで作りたいのですが。

意図した結果を達成するためのエレガントな方法を知っていますか?


2
また、py3.7以降では、dataclassオプションがあります: docs.python.org/3/library/dataclasses.html
JohnE

回答:


151

3.6以降、型付きの名前付きタプルに推奨される構文は

from typing import NamedTuple

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

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

編集 Python 3.7を開始して、使用を検討してdataclassesください(ご使用のIDEではまだ静的型チェックがサポートされていない可能性があります)。

from dataclasses import dataclass

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

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

12
@JohnE; OPは特に名前付きタプルを要求しました。はい、名前付きタプルの多くのユースケースは、データクラスによってより適切に提供されます。しかし、優れたを引用する理由はないnamedtuplesあなたはすべての手段によって、名前のタプルを、必要な場合:namedtupleのために行く
ヴォルフガング・キューン


6
タプルは不変です。データクラスは(デフォルトでは)ありません。タプルの動作に近づくフローズンフラグがあります。知っておくべきことだけです。
shao.lo

103

使用できます typing.NamedTuple

ドキュメントから

バージョン型付きのをnamedtuple

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

これはPython 3.5以降にのみ存在します


私はこのようにそれを宣言:GeoPoint = NamedTuple('GeoPoint', [('longitude', float), ('latitude', float)])私は、データがされて必要なキーと値を含む辞書であるGEO = GeoPoint(**データ)してみてくださいdecimal.Decimal、とフロートへのキャストは起こりません。(何typerrorをいずれかを:( :(ので、どのように、これはtyping.NamedTuple作品参照してください?要旨を.github.com / andilabs / 15002176b2bda786b9037077fa06cc71
andilabs

8
@andiタイピングは変数を強制したりキャストしたりしません、afaik。
Bhargav Rao
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.