Python 在namedtuple中键入提示

Python 在namedtuple中键入提示,python,python-3.x,type-hinting,namedtuple,python-dataclasses,Python,Python 3.x,Type Hinting,Namedtuple,Python Dataclasses,考虑以下代码: from collections import namedtuple point = namedtuple("Point", ("x:int", "y:int")) 上面的代码只是一种演示我试图实现什么的方式。 我想用类型提示制作namedtuple 你知道如何达到预期的效果吗?你可以使用 从文件中 namedtuple的键入版本 这只出现在Python3.5以后的版本中,这是自3.6以来类型化命名元组的首选语法 from typing import NamedTuple c

考虑以下代码:

from collections import namedtuple
point = namedtuple("Point", ("x:int", "y:int"))
上面的代码只是一种演示我试图实现什么的方式。 我想用类型提示制作
namedtuple

你知道如何达到预期的效果吗?

你可以使用

从文件中

namedtuple的键入版本


这只出现在Python3.5以后的版本中,这是自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,考虑使用(IDE可能还不支持静态类型检查):


我是这样声明的:
GeoPoint=NamedTuple('GeoPoint',[('longitude',float),('latitude',float)]
然后我尝试geo=GeoPoint(**data),其中数据是dict,包含所需的键,值是
decimal.decimal
,并且不会发生对float的强制转换;(也没有类型错误:(:(那么这个
类型化.NamedTuple是如何工作的呢?请看@andi typing不强制或强制转换变量,好吧。另外,从py3.7开始,您有dataclass选项:@JohnE;OP专门要求命名元组。是的,命名元组的许多用例将由数据类更好地服务。但是引用一句优秀的话:如果您想要一个具有名称,无论如何:使用命名的元组使用数据类,不可能像解构元组一样解构结果对象。元组是不可变的。数据类不是(默认情况下)它有一个接近元组行为的冻结标志。这是需要注意的。如果dataclass适合您,您可以更进一步,使用package以优雅的方式在运行时强制执行类型检查。
from typing import NamedTuple

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

Point(3)  # -> Point(x=3, y=1)
from dataclasses import dataclass

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

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