如何在modu未公开的类中键入提示

2024-09-27 00:20:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在代码中使用了一个名为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类,只想做类型暗示。你知道吗

Q:有没有一种方法可以在我的代码中键入提示这个未公开的类,而不必像上面那样导入?

有用的参考:https://github.com/laughingman7743/PyAthena/blob/master/pyathena/init.py


Tags: 模块函数代码importnone类型键入s3
2条回答

使用deferred annotations

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):
    ...

相关问题 更多 >

    热门问题