【发布时间】:2022-12-10 19:27:34
【问题描述】:
我有一个关于在其内部使用 Python 类名的问题。我正在制作一个 Python TCP 套接字包装器,它处理 TCP 客户端之间的消息,并触发对可以使用 onMessage() 函数订阅它的其他类的回调。其他类可以通过传递接收消息的回调函数和对 TCP 客户端包装器的引用(以便能够在需要时响应)来订阅传入的 TCP 消息。回调的格式为Callback[[str, TCPClient]],其中 TCPClient 是套接字的包装器。
Visual Studio Code 以某种方式无法识别回调类型提示中的 TCPClient 类。它提到:"TCPClient" is not defined Pylance (reportUndefinedVariable)。它可以很好地识别其他类,甚至是 TCPClient 类所基于的 Thread 类。绕过它的唯一方法是在 TCPClient 文件本身中添加 TCPClient(我认为这很糟糕)。
来自 TCPClient 的一些代码 sn-p 更好地显示了问题。 VS Code 在onMessage 的回调中无法识别 TCPClient:
class TCPClient(Thread):
"""TCP Client wrapper that handles and adds functionality to raw TCP client sockets."""
# ... Constructor and message handling code left out..
def onMessage(self, callback:Callable[[str, TCPClient]]):
self._callbacks.append(callback)
如果我在其内部导入 TCPClient,错误只会消失。为什么会这样?
【问题讨论】:
标签: python