[英]How to type hint a class not exposed by a module
我在我的代码中使用了一个名为pyathena
的模块,我有一个接收pyathena connection
的函数:
import pyathena
def fn(conn) -> None:
<DO SOMETHING>
conn = pyathena.connect(s3_staging_dir=f's3://<THE_BUCKET>/', region_name=<REGION>)
fn(conn)
我想输入提示fn
的conn
参数。
我知道 conn 是pyathena.connection.Connection
类型,但是做
def fn(conn: pyathena.connection.Connection) -> None:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
不起作用: AttributeError: module 'pyathena' has no attribute 'connection'
。
正在做
from pyathena.connection import Connection
def fn(conn: Connection):
...
似乎工作得很好,但我不想在我的代码中公开这个Connection
类,除了做类型提示。
问:有没有办法在我的代码中输入提示这个未公开的类,而不必像上面那样导入?
有用的参考: https://github.com/laughingman7743/PyAthena/blob/master/pyathena/初始化的.py
使用延迟注释:
from __future__ import annotations
import pyathena
def fn(conn: pyathena.connection.Connection) -> None:
...
注释被有效地视为字符串文字。 如果您觉得这会严重影响类型安全(例如,因为您可能拼错类型),您可以改用typing.TYPE_CHECKING
。
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from pyathena.connection import Connection
else:
Connection = '...'
def fn(conn: Connection) -> None:
...
别名呢?
from pyathena.connection import Connection as _Con
def fn(conn: _Con):
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.