无法在NumPy 1.24.3中直接访问“numpy.typing”以进行静态类型

20jt8wwn  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(101)

我尝试使用numpy.typing模块中的ArrayLike类型进行静态类型。我使用的是NumPy版本1.24.3。
当我直接从numpy.typing导入ArrayLike时,一切都按预期工作:

from numpy.typing import ArrayLike

def myfun(a: ArrayLike):
   pass

但是,如果我尝试将numpy作为np导入,然后使用np.typing.ArrayLike,我会得到一个AttributeError。
有:

import numpy

def myfun(a: numpy.typing.ArrayLike):
   pass

我得到的错误是:

ERROR!
Traceback (most recent call last):
  File "<string>", line 4, in <module>
  File "/usr/local/lib/python3.11/site-packages/numpy/__init__.py", line 320, in __getattr__
    raise AttributeError("module {!r} has no attribute "
AttributeError: module 'numpy' has no attribute 'typing'

我不知道为什么我得到这个错误。我在我的本地机器上和在线Python解释器上都试过了,结果都是一样的。
任何见解将不胜感激。

zazmityj

zazmityj1#

在像numpy这样的单个包中,有像typing这样的子包。文件结构类似于:

numpy/
    __init__.py
    ...
    typing/
        ...
        __init__.py
        ...

通过使用:

from numpy.typing import ArrayLike

你正在从包'numpy'导入子包'typing',并使用属性ArrayLike。然而,这:

import numpy
numpy.typing.ArrayLike

只导入numpy包。第二行将“typing”视为numpy导出的值。但是,“键入”是一个子包。因此,它导致错误。

相关问题