在 Python 3.7 中,我有一个数据类,它是链表中的一个节点。
from dataclasses import dataclass
@dataclass
class Node(object):
right: Node
left: Node
Run Code Online (Sandbox Code Playgroud)
问题是我在 Pycharm 中收到检查错误:
未解析的引用“节点”
运行时出现此错误
名称错误:名称“节点”未定义
dataclass 要求我声明类型,那么如何解决这个问题?
我正在使用 Python 3.7 并有类似的东西
class A(object):
def __init__(self, value: int):
self.value = value
@classmethod
def factory(cls, value: int) -> A:
return A(value=value)
Run Code Online (Sandbox Code Playgroud)
是的,这是一个人为的示例,但我本质上是试图注释工厂函数以声明它返回 的实例,但是,当我尝试 在文件上A运行 linter 时,此操作会失败,因为它抱怨未定义。flake8A
有没有什么方法可以注释这个函数,这样 linter 就不会抱怨?
我认为静态类型会让我的生活变得更容易在Python中,考虑到我通常在C中工作.我创建了一个类似的类:
class node(object):
"""
properties, constructor, etc.
"""
def add_outneighbor(self, neighbor: node) -> None:
"""
do stuff
"""
Run Code Online (Sandbox Code Playgroud)
Flake8告诉我这node是一个未知类型add_outneighbor的定义.目前我正在解决这个问题isinstance(arg, type),但这似乎打败了类型提示的目的.有一个更好的方法吗?
这是我提到的资源,以获取有关类型提示的信息,但我找不到有关此自引用问题的任何讨论.
class Session:
@staticmethod
def load_from_json(json_path:str) -> Session:
pass
Run Code Online (Sandbox Code Playgroud)
上面抛出一个NameError: name 'Session' is not defined. 在其定义中使用自身作为类型提示是不可能的吗?