如何导入同一目录或子目录内的类?

2024-12-18 08:39:00
admin
原创
165
摘要:问题描述:我有一个存储所有.py文件的目录。bin/ main.py user.py # where class User resides dir.py # where class Dir resides 我想在main.py中使用user.py和dir.py中的类。如何将这些 Python...

问题描述:

我有一个存储所有.py文件的目录。

bin/
   main.py
   user.py # where class User resides
   dir.py # where class Dir resides

我想在main.py中使用user.pydir.py中的类。
如何将这些 Python 类导入到main.py中?此外,如果user.py位于子目录中,
如何导入类?

User

bin/
    dir.py
    main.py
    usr/
        user.py

解决方案 1:

Python 2

在与文件相同的目录中创建一个名为 的空文件__init__.py。这将向 Python 表示“可以从此目录导入”。

然后就这么做...

from user import User
from dir import Dir

如果文件位于子目录中,情况也是如此 -__init__.py也将其放在子目录中,然后使用常规导入语句,带点符号。对于每个目录级别,您都需要添加到导入路径。

bin/
    main.py
    classes/
        user.py
        dir.py

因此,如果目录名为“classes”,那么您可以执行以下操作:

from classes.user import User
from classes.dir import Dir

Python 3

.与前一个相同,但如果不使用子目录,则在模块名称前加上前缀:

from .user import User
from .dir import Dir

解决方案 2:

我刚刚了解到(感谢martineau 的评论),为了从同一目录内的文件导入类,现在可以使用 Python 3 编写:

from .user import User
from .dir import Dir

解决方案 3:

从 python3.3 开始,__init__.py不再需要。如果控制台的当前目录是 python 脚本所在的目录,则一切都正常

import user

但是,如果从不包含 的其他目录调用,则此方法无效user.py

在这种情况下,请使用

from . import user

即使您想导入整个文件而不是仅仅导入其中一个类,这种方法也是有效的。

解决方案 4:

在您的main.py

from user import Class

其中Class是您要导入的类的名称。

如果你想调用的方法Class,你可以使用以下方式调用它:

Class.method

__init__.py请注意,同一目录中应该有一个空文件。

解决方案 5:

如果 user.py 和 dir.py 不包含类,那么

from .user import User
from .dir import Dir

不起作用。然后您应该导入为

from . import user
from . import dir

解决方案 6:

如果你不想将函数和类混在一起,你可以导入模块并通过其名称进行访问

import util # imports util.py

util.clean()
util.setup(4)

或者你可以将函数和类导入到你的代码中

from util import clean, setup
clean()
setup(4)

您可以使用 wildchar * 将该模块中的所有内容导入到您的代码中

from util import *
clean()
setup(4)

解决方案 7:

对于 Python 3+,假设您有以下结构:

A/
  __init__.py
  bar.py
  foo.py

在您的__init__.py文件中,您可以输入from . import foo

然后你可以在 bar 文件中导入 foo

# A/bar.py
from foo import YourClass

这些文件的目的__init__.py是包含在遇到包的不同级别时运行的可选初始化代码。您放入的所有内容都__init__.py将在包加载期间初始化。

解决方案 8:

为了使其更容易理解:

步骤 1:让我们进入一个目录,其中包含所有内容

$ cd /var/tmp

步骤 2:现在让我们创建一个 class1.py 文件,其中包含类名 Class1 和一些代码

$ cat > class1.py <<EOF
class Class1:
    OKBLUE = ''
    ENDC = ''
    OK = OKBLUE + "[Class1 OK]: " + ENDC
EOF

步骤 3:现在让我们创建一个 class2.py 文件,其中包含类名 Class2 和一些代码

$ cat > class2.py <<EOF
class Class2:
    OKBLUE = ''
    ENDC = ''
    OK = OKBLUE + "[Class2 OK]: " + ENDC
EOF

步骤 4:现在让我们创建一个 main.py,它将执行一次以使用来自两个不同文件的 Class1 和 Class2

$ cat > main.py <<EOF
"""this is how we are actually calling class1.py and  from that file loading Class1"""
from class1 import Class1 
"""this is how we are actually calling class2.py and  from that file loading Class2"""
from class2 import Class2

print Class1.OK
print Class2.OK
EOF

步骤 5:运行程序

$ python main.py

输出将是

[Class1 OK]: 
[Class2 OK]:

解决方案 9:

Python 3


相同的directory

导入文件:log.py

导入类:SampleApp()

import log
if __name__ == "__main__":
    app = log.SampleApp()
    app.mainloop()

或者

目录是basic

导入文件:log.py

导入类:SampleApp()

from basic import log
if __name__ == "__main__":
    app = log.SampleApp()
    app.mainloop()

解决方案 10:

from user import User 
from dir import Dir 

解决方案 11:

我不确定为什么这个有效,但使用 Pycharm 构建from file_in_same_dir import class_name

IDE 对此表示抱怨,但似乎它仍然有效。我使用的是 Python 3.7

解决方案 12:

对于python3

从兄弟姐妹导入:from .user import User

从侄子导入:from .usr.user import User

解决方案 13:

事实上,Python 并没有为这种日常用例提供优雅的解决方案。当你测试最终将作为 Python 包的一部分交付的代码时,这个问题尤其严重。以下是一种对我有用的方法:

目录 |

  • 文件1.py

  • 文件2.py

假设您想从 file1 导入 file2。

# In file1.py:
try:
     # This works when packaged as Python package
     from . import file2
except:
     # This works when simply invoking file1 as a module (i.e. python file1)
     import file2

# rest of the code ...

解决方案 14:

如果您filename.py在同一个文件夹中,您可以轻松地像这样导入它:

import filename

我正在使用 python3.7

解决方案 15:

我无法对最佳答案提交编辑,因此根据上面评论中给出的一些指示,另一件要尝试的事情是:

from subfolder.MyClassFile import MyClass

就是这样。只需记住在我们的 中有一个__init__.py空文件即可subfolder

仅供参考,如果您的结构如下,则该解决方案有效:

your_project/
    __ini__.py
    main.py
    subfolder/
        __init__.py
        MyClassFile.py  <-- You want this

MyClassFile.py包含类MyClass

解决方案 16:

Python3

使用

from .user import User inside dir.py file

use from class.dir import Dir inside main.py
or from class.usr import User inside main.py

就像这样

解决方案 17:

# My Python version: 3.7
# IDE: Pycharm 2021.1.2 Community

# Have "myLib" in folder "labs":

class Points:
    def __init__(self, x = 0, y = 0):
        self.__x = x
        self.__y = y
    def __str__(self):
        return f"x = {self.__x}, y = {self.__y}"

# Have "myFile" in (same) folder "labs":

from myFile import Point

p1 = Point(1, 4)
p2 = Point(1, 4)
print(f"p1: {p1}, p2: {p2}")

# Result:
# p1: x = 1, y = 4, p2: x = 1, y = 4

# Good Luck!

解决方案 18:

在一个足够复杂的项目中,我们无法使用 python 导入来执行 hello world。当所有其他方法都失败时,我使用以下方法取得了一些成功

sys.path.append(os.path.join(pathlib.Path(__file__).parent.resolve()))

解决方案 19:

太简短了,创建一个文件__init__.py是类目录,然后像下面这样将其导入到你的脚本中(导入所有情况)

from classes.myscript import *

仅导入选定的类

from classes.myscript import User
from classes.myscript import Dir

解决方案 20:

从同一目录导入

from . import the_file_you_want_to_import 

从子目录导入目录应该包含

初始化.py

那么除了你的文件之外的文件

从目录导入你的文件

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2588  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1553  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   31  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   26  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   21  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用