2012-02-29 147 views
1

我一直在試圖解決這一問題了一會兒,我必須在這裏失去了一些基本的東西(原諒我,我是比較新的Python開發):Python的嵌套包問題

我有一個包結構,像這樣:

base 
| 
-->util 
    __init__.py 
    Class1.py 
    Class2.py 
__init__.py 
Main.py 

我的課是相當良性的:

class Class1(object): 

    def __init__(self): 

    # some methods... 


class Class2(object): 

    def __init__(self): 

    # more methods... 

Main.py,我有:

import utils 

if __name__ == '__main__': 
    c1 = utils.Class1() 
    c2 = utils.Class2() 

我的PYTHONPATH設置爲包括src,src\basesrc\base\utils。但是,巨蟒給了我這個錯誤試圖運行Main.py時:

AttributeError: 'module' object has no attribute 'Class1' 

已經有人遇到過這種方法,但你知道如何解決它?謝謝!

+0

文件不要將其命名爲文件中的類!這是一個不好的習慣,因爲你不知道某物是類還是包。模塊(文件)僅使用小寫字母名稱。 – 2012-02-29 22:57:47

回答

5

這是比Java有點不同。在java中,每個文件通常是一個類,在python中,每個文件都是一個模塊。鑑於你在這裏描述的情況,你應該這樣做:

import utils.Class1 
import utils.Class2 

if __name__ == '__main__': 
    c1 = utils.Class1.Class1() 
    c2 = utils.Class2.Class2() 

你可以在這裏做很多事情。例如,您可以有一個名爲「resources」的模塊,如下所示:

base -> 
    utils -> 
     resources.py 

其中包含Class1和Class2。然後,你可以這樣做:

import utils.resources 


c1 = utils.resources.Class1() 

等,但最關鍵的是類=在python

+0

謝謝!這打擊了頭部:)我錯誤地利用了以前的OO知識:) – mevatron 2012-02-29 23:04:27

0

您是否將您的類導入到utils模塊的主要 .py中? 只需添加到utils的/ 初始化的.py:

from Class1 import Class1 
from Class2 import Class2 

然後在您的main.py, 「進口utils的」 將導入的文件作爲utils.Class1等