namedtuple에 힌트 입력


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 갈
볼프강 Kuehn는

1
데이터 클래스를 사용하면 튜플처럼 결과 객체를 분해 할 수 없습니다
VARAK

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)])나는 시도 지리적 = GeoPoint의 (** 데이터) 데이터가 필요한 키와 값 인 포함 DICT되는 경우 decimal.Decimal, 그리고 플로트에는 캐스트가 발생하지를 (더 typerror 하나가 :( :( 그래서이 어떻게 typing.NamedTuple작품을 볼 수 없습니다? 요점을 .github.com / andilabs / 15002176b2bda786b9037077fa06cc71
andilabs

8
@andi 타이핑은 변수를 강제하거나 캐스팅하지 않습니다.
Bhargav Rao
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.