如何为python中的参数分配类型?

How to assign a type to a parameter in python?

我有一个名为 triangulo 的 class 和一个名为 coord 的 class。所以,为了创建一个新的三角形实例,我传递了三个顶点,比如

t= triangle( V1, V2, V3)

所以,为了文档,我想这样写 class 三角形

class triangulo( object ):
   def __init__(self, a:coord, b:coord, c:coord)->None:
       """Constructor
       """
       self.A= a
       self.B= b
       self.C= c

class coord( object ):    
    def __init__( self, x, y ): 
        self.x= x
        self.y= y

但是当我尝试导入这个库时出现这个错误

NameError: 名称 'coord' 未定义

所以问题是:如何让 python 接受顶点作为一种数据类型?

您可以将 class 的名称用引号括起来

def __init__(self, a: 'coord', b: 'coord', c: 'coord') -> None:
  ...

或者您可以use a __future__ import自动执行此操作

from __future__ import annotations

...

def __init__(self, a: coord, b: coord, c: coord) -> None:
  ...

from __future__ import annotations 有效地将所有类型签名用引号括起来,以防止出现这个确切的问题。只要你不在运行时反射性地查看类型注释(使用 MyClass.__annotations__ 之类的东西),你甚至不会注意到,你的类型检查器会工作得更好。

请注意,类型提示可以是 class 或类型(在您的情况下顶点是 class):

from whatever import vertex

class triangle():
    def __init__(self, v1:vertex, v2:vertex, v3:vertex)->None:
        ...

更多详情请见https://www.python.org/dev/peps/pep-0483/

使用前需要声明class!所以将 coord class 放在 triangulo 的顶部将解决问题