Python抽象正确调用基类导入库的方法

Python Abstract Proper Way of Calling Library Imported in Base Class

使用抽象类的基类中导入的函数的正确方法是什么?例如:在base.py中,我有以下内容:

1
2
3
4
5
6
7
8
9
import abc
import functions

class BasePizza(object):
    __metaclass__  = abc.ABCMeta

    @abc.abstractmethod
    def get_ingredients(self):
        """Returns the ingredient list."""

然后我在diet.py中定义了方法:

1
2
3
4
5
6
7
8
9
import base

class DietPizza(base.BasePizza):
    @staticmethod
    def get_ingredients():
        if functions.istrue():
            return True
        else:
            retrun False

但是,如果我试着跑

1
python diet.py

我得到以下信息:

1
NameError: name 'functions' is not defined

如何让diet.py识别base.py导入的库?


抽象方法本身不关心实现细节。

如果您需要一个特定的模块来实现特定的具体实现,您需要在模块中导入该模块:

1
2
3
4
5
6
7
8
import base
import functions


class DietPizza(base.BasePizza):
    @staticmethod
    def get_ingredients():
        return functions.istrue()

请注意,在多个位置导入模块不需要额外的费用。当一个模块在多个其他模块中使用时,python会重新使用已经创建的模块对象。