2017-09-05 46 views
1

我一直在尋找這個很久沒有找到任何東西。我是一位經驗豐富的程序員,但最近轉向了Python。如何爲直觀命名設置python包/模塊目錄和類定義

總之,我想擴大/發展相關類的面向對象的庫與多個獨立的文件(由於複雜性和增加的模塊的慾望)命名空間:

目前,我可能有:

# file lib/NameSpace.py 

class Foo(object): 
    def __init__(self): 
     .... 

class Bar(object): 
    def __init__(self): 
     .... 

class Baz(object): 
    def __init__(self): 
     .... 

而與此我的程序可以做到這一點:

import NameSpace 
a = NameSpace.Foo() 
b = NameSpace.Bar() 

現在,這些類是越來越複雜和Foo和酒吧functionall雖然y在概念性名稱空間中有所不同,但我想將它們移動到名稱空間內的單獨文件中,但否則會使我的代碼庫保持不變。

所以,我想我要的文件結構是這樣的:

lib/NameSpace 
lib/NameSpace/__init__.py 
lib/NameSpace/Foo.py 
lib/NameSpace/Bar.py 
lib/NameSpace/Baz.py 

但這需要我改變所有運行時代碼初始化這些像這樣:

import NameSpace.Foo 
a = NameSpace.Foo.Foo() 

# ***Boo.**** Why u not like 'a = NameSpace.Foo()'? 

那麼,如何我的結構是這些東西,不必將'Foo'類名添加到模塊'Foo'中?通過編輯INIT的.py是一個工廠,像這樣我可以做到這一點:

#lib/NameSpace/__init__.py 

import NameSpace.Foo as NSF 

def Foo(*args, **kwargs): 
    return(NSF.Foo(*args,**kwargs)) 

但是,這似乎只是多不雅,比我從Python的期待。有沒有更好的方法來做到這一點?

回答

1

在你__init__.py

from .Foo import Foo 
from .Bar import Bar 
from .Baz import Baz 

不同命名的文件比你的等級防止覆蓋。

+0

完美。謝謝! – Kevin

0

爲了簡單起見,你可以從模塊導入Foo類就像這樣:

from NameSpace.Foo import Foo 

之後,你可以這樣創建Foo類的一個對象:

a = Foo() 

如果您例如,當您導入東西時,您可以提供不同的名稱:

from NameSpace.Foo import Foo as F 
a = F() 
相關問題