2012-06-04 2 views
1

Я определил 2 класса - Лицо & Менеджер. Менеджер наследует класс Person. Я получаю сообщение об ошибке при попытке импортировать класс Person.Определение класса Python - заявление импорта

Код указан ниже.

Person.py

class Person: 
    def __init__(self, name, age, pay=0, job=None): 
     self.name = name 
     self.age = age 
     self.pay = pay 
     self.job = job 

    def lastname(self): 
     return self.name.split()[-1] 

    def giveraise(self,percent): 
     #return self.pay *= (1.0 + percent) 
     self.pay *= (1.0 + percent) 
     return self.pay 

Manager.py

from Basics import Person 

class Manager(Person): 
    def giveRaise(self, percent, bonus=0.1): 
     self.pay *= (1.0 + percent + bonus)   
     return self.pay 

заявления об ошибках:

C: \ python27 \ Основы> Person.py

C: \ python27 \ Основы> Manager.py Traceback (последний последний звонок): Fil е "C: \ python27 \ Основы \ Manager.py", строка 1, в из Basics не импортировать Person ImportError: Нет модуль с именем Основа

Почему я получаю сообщение об ошибке найденных Нет модуля?

ответ

6

Вы должны посмотреть, как работает import and PYTHONPATH. В вашем случае, вы можете решить, что с помощью:

from Person import Person 

Я вижу, вы пришли из фона Java (где каждый файл должен иметь класс с таким же именем файла), но это не так, как модули Python Работа.

Вкратце, когда вы запускаете скрипт Python из командной строки, как и вы, он ищет модули (среди других мест) в вашем текущем каталоге. Когда вы импортируете (простое) имя, как вы, Python будет искать:

  1. Файл с именем Basic.py; или:
  2. Папка с именем Basic с файлом с именем __init__.py.

Затем он будет искать определение внутри этого модуля с именем Person.

+0

+1 для "не ставьте 1 класс в 1 файл" – schlamar

3

Потому что он находится в Person.py, а не Basics.py.

from Person import Person 
3

Вы определили Person класс в файле с именем Person.py. Таким образом, вы должны импортировать его, как это:

from Person import Person 

Обратите внимание, что это соглашение в Python, чтобы иметь прописные имена модулей. Например, переименуйте Person.py в person.py и Manager.py в manager.py. Тогда вы бы импортировать Person класс как это:

from person import Person 

Если person модуль является частью пакета, вы, вероятно, хотите импортировать, как это:

from .person import Person 

Это облегчит переход к Python 3.

0

from Basics import Person должно быть from Person import Person. У вас нет модуля Basics.py для импорта.

Смежные вопросы