2015-05-28 5 views
2

Каков правильный способ использования функций, которые импортируются в базовый класс абстрактного класса? Например: в base.py У меня есть следующие:Python Abstract Правильный способ вызова библиотеки, импортированной в базовый класс

import abc 
import functions 

class BasePizza(object): 
    __metaclass__ = abc.ABCMeta 

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

Тогда я определить метод в diet.py:

import base 

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

Однако, если я пытаюсь запустить

python diet.py 

я получаю следующее :

NameError: name 'functions' is not defined 

Как я могу получить diet.py для распознавания библиотек, импортированных base.py?

+1

Что случилось с тем, что вы снова импортировали модуль или делегировали его методу? –

+0

... вы говорите 'от базовых функций импорта' –

+0

также' import base.py' недействителен python, я думаю .... если ваш макет файла действительно действительно неуловимый –

ответ

3

Абстрактные методы не относятся к деталям реализации .

Если вам нужен конкретный модуль для конкретной конкретной реализации, вам необходимо импортировать это в модуле:

import base 
import functions 


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

Обратите внимание, что импорт модуля в нескольких местах делает ничего лишнего не стоит , Python повторно использует уже созданный объект модуля, когда модуль используется в нескольких других модулях.

+1

Хорошо, спасибо. Я просто хотел быть уверенным в правильной процедуре для этого. Нет хороших методов обучения неверно. – user2694306