4

我正在尝试在 python 中实现一个抽象类(实际上是在一个 django 应用程序中),并且正在对抗这种疯狂:

>python concreteChildClass.py
Traceback (most recent call last):
    File"concreteChildClass.py, line 1, in <module>
        from abc_base import AbstractBaseClass
ImportError: No module named abc_base

我已经将我的问题归结为在我的环境中重现错误的这些文件:

抽象基类.py

import abc

class abstractBaseClass(object):
    __metaclass__ = abc.ABCMeta

    @abc.abstractmethod
    def load(self, input):
    """Retrieve data from the input source and return an object."""
        return

具体的ChildClass.py

from abc_base import AbstractBaseClass

class ConcreteChildClass(object):
    def load(self, input):
        return input.read()

这是我的python版本信息

>>> import sys
>>> print sys.version
2.7.3 (default, Jan  2 2013, 13:56:14)
[GCC 4.7.2]

我对 python 还很陌生(因为这个问题可能很明显),但我不知道如何找到“abc”,但不知道如何找到“abc_base”。我的阅读和谷歌搜索导致我对此没有任何答案。如果这是一个愚蠢的问题,请提前致谢并道歉。

4

1 回答 1

16

我假设您正在学习教程?

您所犯的错误(公平地说,本教程对此并不清楚)是假设这abc_base是标准库中某个模块的名称。

相反,它恰好是教程中第一个 python 文件的名称,其中PluginBase定义了类。


要使代码适合您,您需要从包含所需基类的任何文件导入,而不是从abc_base.

注意:因为您的示例中的类名和文件名是相同的,所以我继续更改文件名,以便更清楚正在发生的事情以及您需要导入的内容:

基础.py

import abc

# Note: You forgot to capitalize the 'A' in the original
class AbstractBaseClass(object):
    __metaclass__ = abc.ABCMeta

    @abc.abstractmethod
    def load(self, input):
    """Retrieve data from the input source and return an object."""
        return

具体的.py

from base import AbstractBaseClass

class ConcreteChildClass(AbstractBaseClass):
    def load(self, input):
        return input.read()
于 2013-09-18T15:39:55.013 回答