gpt4 book ai didi

python - 为什么我无法调用packagename.modulename.foo()?

转载 作者:行者123 更新时间:2023-12-01 00:00:03 26 4
gpt4 key购买 nike

在我创建的工作 python 目录中:

packagename/__init__.py
packagename/modulename.py
test.py

在 modulename.py 中我创建了一些空类:

class Someclass(object):
pass

在测试.py中:

import packagename
packagename.modulename.Someclass()

为什么我无法在 test.py 中调用 packagename.modulename.someclass() ?

AttributeError: 'module' object has no attribute 'modulename'

我理解正确的方法是:

import packagename.modulename

from packagename import modulename

但我不明白为什么在我的案例中会出现此错误。

更新:

换句话说,有什么方法可以导入包的内容以及不同命名空间中的所有模块吗?我需要正确的 pythonic 表达式:

from packagename import * as mynamespace

最佳答案

Python 不会自动递归和导入子包。当你说:

import packagename

这就是它导入的全部内容。如果你说:

import packagename.modulename

然后它首先导入packagename,然后导入packagename.modulename为其分配引用作为packagename<的属性。因此,当您在代码中说:

packagename.modulename.Someclass()

Python 只是使用100% 正常属性查找。首先在当前命名空间中查找packagename变量。然后查找 packagename 对象的 modulename 属性。然后查找 modulename 对象的 Someclass 属性。

如果您忽略导入packagename.modulename,那么packagename上显然没有属性,称为modulename ,此后为 AttributeError

我建议您进入命令行并导入一些内容,然后使用 dir() 来检查它。然后导入一个子包,并再次使用dir()。您很快就会看到差异。

<小时/>

最后,语法:

from packagename.modulename import SomePackage

本质上与此相同:

import packagename.modulename
SomePackage = packagename.modulename.SomePackage

(当然,它的实现方式不同,但结果或多或少相同)。

这有帮助吗?

关于python - 为什么我无法调用packagename.modulename.foo()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1966783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com