2012-06-04 45 views
1

我已經定義了2個類 - Person & Manager。管理器繼承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 追溯(最近呼叫最後): Fil e「C:\ Python27 \ Basics \ Manager.py」,第1行,在 from Basics import Person ImportError:No module named Basics

爲什麼我會得到No module found錯誤?

回答

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.py文件中定義的Person類。因此,你應該導入它是這樣的:

from Person import Person 

請注意,這是在Python中約定有小寫的模塊名稱。例如,將Person.py重命名爲person.pyManager.pymanager.py。然後你會導入Person類是這樣的:

from person import Person 

如果person模塊是包的一部分,你可能要導入這樣的:

from .person import Person 

這將緩解過渡到Python 3.

0

from Basics import Person應該是from Person import Person。您沒有從中導入的Basics.py模塊。