如何在从抽象 class 派生的文件夹中导入 class?
How to import a class inside a folder that derives from an abstract class?
在我的主目录中,我有两个程序:main.py
和一个 myfolder(这是一个目录)。
main.py
文件有这两行:
from myfolder import Adding
print(Adding.execute())
在 myfolder 目录中,我只有 3 个 python 文件:__init__.py
、abstract_math_ops.py
和 adding.py
.
__init__.py
文件只有一行:
from myfolder.adding import Adding
abstract_math_ops.py
文件只是一个摘要class,使用一种方法:
from abc import ABC, abstractmethod
class AbstractMathOps(ABC):
@staticmethod
@abstractmethod
def execute(*args):
pass
adding.py
文件是:
from abstract_math_ops import AbstractMathOps
class Adding(AbstractMathOps):
@staticmethod
def execute(*args):
--doing some addition --
当我执行main.py
时,出现错误:
~\myfolder\adding.py in <module>
---> 1 from abstract_math_ops import AbstractMathOps
ModuleNotFoundError: No module named 'abstract_math_ops '
如果我将摘要 class 放入 adding.py 文件中,我不会收到任何错误。但是,我需要将它放在不同的文件中,因为其他 python 文件(即 substracting.py、multipying.py)可以按照 AbstractMathOps 摘要 class 的足迹创建。另外,这样我就不会在一个文件中包含所有内容。
我该如何解决这个问题?
试试:
from .abstract_math_ops import AbstractMathOps
在这种情况下,您需要添加文件的相对位置才能进行导入。
您的文件夹是一个包,您不能像在 adding.py
中尝试的那样导入包的同级子模块。您要么需要使用绝对导入(from myfolder.abstract_math_ops import AbstractMathOps
,在任何地方都一样),要么使用显式相对导入(from .abstract_math_ops import AbstractMathOps
,它只能在同一个包中使用)。
但是如果您的包中的两个模块确实如您所展示的那样短,也许您应该重新考虑制作 myfolder
一个包。您可以非常轻松地在单个 myfolder.py
文件中定义所有 类,并且由于 类 是如此相互关联,因此更容易理解。
在我的主目录中,我有两个程序:main.py
和一个 myfolder(这是一个目录)。
main.py
文件有这两行:
from myfolder import Adding
print(Adding.execute())
在 myfolder 目录中,我只有 3 个 python 文件:__init__.py
、abstract_math_ops.py
和 adding.py
.
__init__.py
文件只有一行:
from myfolder.adding import Adding
abstract_math_ops.py
文件只是一个摘要class,使用一种方法:
from abc import ABC, abstractmethod
class AbstractMathOps(ABC):
@staticmethod
@abstractmethod
def execute(*args):
pass
adding.py
文件是:
from abstract_math_ops import AbstractMathOps
class Adding(AbstractMathOps):
@staticmethod
def execute(*args):
--doing some addition --
当我执行main.py
时,出现错误:
~\myfolder\adding.py in <module>
---> 1 from abstract_math_ops import AbstractMathOps
ModuleNotFoundError: No module named 'abstract_math_ops '
如果我将摘要 class 放入 adding.py 文件中,我不会收到任何错误。但是,我需要将它放在不同的文件中,因为其他 python 文件(即 substracting.py、multipying.py)可以按照 AbstractMathOps 摘要 class 的足迹创建。另外,这样我就不会在一个文件中包含所有内容。
我该如何解决这个问题?
试试:
from .abstract_math_ops import AbstractMathOps
在这种情况下,您需要添加文件的相对位置才能进行导入。
您的文件夹是一个包,您不能像在 adding.py
中尝试的那样导入包的同级子模块。您要么需要使用绝对导入(from myfolder.abstract_math_ops import AbstractMathOps
,在任何地方都一样),要么使用显式相对导入(from .abstract_math_ops import AbstractMathOps
,它只能在同一个包中使用)。
但是如果您的包中的两个模块确实如您所展示的那样短,也许您应该重新考虑制作 myfolder
一个包。您可以非常轻松地在单个 myfolder.py
文件中定义所有 类,并且由于 类 是如此相互关联,因此更容易理解。