2015-08-25 18 views
0

鑑於以下文件結構:有沒有辦法使用Python包導入路徑作爲類說明符?

Car/ 
    __input__.py 
    Line.py 
    Country.py 

凡Line.py包含一個類:

class Line:  
    def __init__(self,name): 
    self.name = name 

我知道我可以使用類 '行' 像這樣的東西:

from Car.Line import Line 
line = Line("Chevy") 
print str(line) 

但是,由於各種原因,我希望能夠在指定類名稱時使用固有的包導入路徑,希望我能夠將所有東西都包裝在一起,一舉成功。

即,我希望能夠做這樣的事情:

import Car 
line = Car.Line("chevy") 
country = Car.Country("chevy") 

我已經猜到這會工作:

from Car.Line import Line as Car.Line 

但是,這並不工作:Python中沒有按不喜歡別名中的點。

我已經嘗試了其他幾件事,但沒有能夠拿出我猜想應該可能的東西。

我知道那裏有關於是否所有的類應該能夠成爲一個單獨的類文件的討論,而這不是我真正想要實現的。我希望能夠在文件系統中有效地將我的一些類一起分離,同時能夠優雅地解決它們。

這是我能用Python做的事情嗎?我可以在那裏一半嗎?

回答

1

一旦你瞭解了關於模塊的一個簡單的事實,解決方案很簡單:你在它們中定義的所有名稱默認導出用於導入。實際上,您需要使用__all__特殊名稱主動抑制此行爲。

所以要實現你想要的,你需要做的就是將所需的東西導入Car命名空間。其中__init__.pyCar組成。

所以在這個文件中,你做

from .Line import Line 

就是這樣。我建議儘管你看看Pep8,Python的命名規範,並堅持下去。這意味着你的模塊/軟件包名稱變成小寫,並且其他許多提示讓其他人(例如我在StackOverflow上)更容易理解。

+0

謝謝你deets - 你的解決方案工作的魅力。我會仔細看看Pep8--但我必須承認 - 我發現它太獨裁了。我想將你的答覆標記爲答案,或者至少提供答案 - 可悲的是,我似乎還沒有這些特權。再次感謝 ! – tmark

+0

如果有幫助,請將其標記爲。謝謝。 – deets

+0

deets - 它幫助很大。我只是沒有看到如何將問題標記爲答案。我現在做,我*認爲* ;-) – tmark

相關問題