2013-09-25 104 views
7

這似乎是一個愚蠢的問題,但我一直無法在任何地方找到答案。在我的各種軟件包中,我有一組模塊,通常每個模塊都包含一個類。當我想創建一個類的實例,我不得不提到它兩次:避免在python中輸入類名稱

例: 包/ obj.py:

class obj(object): 
    pass 

file.py:

import package.obj 
my_obj = package.obj.obj() 

是有沒有辦法重新組織我的代碼,這樣我就不必輸入兩次這個名字了?理想情況下,我想只需鍵入package.obj()。

+1

在'__init __ py','從OBJ進口obj',然後在'file.py',您可以用'從包導入obj; my_obj = obj()' –

+0

Upvoted爲什麼? –

+1

因爲sfpiano會將實際的代碼片段放在顯示他正在談論的內容中。 –

回答

7

Python不是Java。根據類別隨意把許多類合併成一個文件,然後將該文件命名爲:

import mypackage.image 

this_image = image.png(...) 
that_image = image.jpeg(....) 

如果你的類是如此之大,所以希望他們在不同的文件,以減輕維護負擔,這很好,但你應該那麼不會給用戶(或者你自己,如果你使用自己的軟件包)造成額外的痛苦;收集您的公開課在包的__init__文件(或類文件,如image)提出一個相當平坦的命名空間:

mypackage中的__init__.py(或image.py):

from _jpeg import jpeg 
from _png import png 

mypackage中的_jpeg.py

class jpeg(...): 
    ... 

mypackage的_png.py

class png(...): 
    ... 

用戶代碼:

# if gathered in __init__ 
import mypackage 
this_image = mypackage.png(...) 
that_image = mypackage.jpeg(...) 

或:

# if gathered in image.py 
from mypackage import image 
this_image = image.png(...) 
that_image = image.jpeg(....) 
5

您可以使用from ... import ...聲明:

from package.obj import obj 
my_obj = obj() 
1

給你的類和模塊有意義的名字。就是這個方法。命名你的模塊'類'並命名你的類'MyClass'。

from package.classes import MyClass 

myobj = MyClass()