繁体   English   中英

如何键入提示模块未公开的类

[英]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)

我想输入提示fnconn参数。

我知道 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM