繁体   English   中英

__init__.py 中的别名

[英]Aliasing in __init__.py

我正在使用 python 3.10.7 并面临奇怪的问题。请让我知道这是否是访问事物的正确方法

情况1:

我的文件结构如下:

calculator
 calcfunctions
  addition.py (def sum(a,b) in this file)
  subtraction.py
 __init__.py
main.py

__init__.py中的代码如下:

list_languages = ["Rust","Java"]
import calcfunctions.addition

当我尝试在控制台中导入模块时,它工作得很好,如下所示:

PS E:\practice\calculator> python
Python 3.10.7 (tags/v3.10.7:6cc6b13, Sep  5 2022, 14:08:36) [MSC v.1933 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import calcfunctions 
>>> calcfunctions.addition.sum(2,3) 
5

案例二:

如果我修改__init__.py中的代码如下

list_languages = ["Rust","Java"]
import calcfunctions.addition as summation

现在我尝试在repl中导入,它给出的错误如下:

PS E:\practice\calculator> python
Python 3.10.7 (tags/v3.10.7:6cc6b13, Sep  5 2022, 14:08:36) [MSC v.1933 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import calcfunctions
>>> calcfunctions.list_languages
['Rust', 'Java']
>>> calcfunctions.summation(2,3) 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable
>>> summation(2,3)               
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'summation' is not defined
>>> summation.sum(2,3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'summation' is not defined

我在这里做错了什么?

如果您希望calcfunction summation calcfunction.additionsum方法的引用,则希望您的导入from calcfunction.addition import sum as summation 由于您在 package 中执行此操作,因此您也可以使用相对导入,而不是明确命名calcfunctionfrom.addition import sum as summation

如果您希望主模块(您以交互方式运行)定义summation ,则需要执行from calcfunction import summation调用,而不仅仅是导入calcfunction本身。

需要通过以下方式访问:

>>> calcfunctions.summation.sum(2,3)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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