你混淆了兩個概念。一個python「模塊」是一個包含python代碼的文件,可以導入。一個python「class」是可以在模塊中定義的東西。
在你的例子中,apple
和grape
是模塊。您不能通過執行諸如apple()
之類的操作來調用模塊,這是不允許的。您需要導入模塊中包含的類。
所以說apple.py
有一個在其中定義的GetApple
類。所以apple.py
是這樣的:
class GetApple(object):
def __init__(self):
print("I have an apple!")
模塊也可以具備的功能,讓你可以有一個GetApple
函數:
def GetApple():
print("I have an apple!")
模塊也可以有變量。他們可以有任何數量的變量,類和函數。您可以單獨導入它們(例如使用from apple import GetApple
或導入模塊並從模塊import apple
訪問它們。但是你不能導入,然後調用一個模塊(至少不能以任何合理的方式),只能調用它的函數或類。
爲了您的目錄結構,你可以把它使用任何這些方法,然後運行:
>>> from ican.haz.apple import GetApple
>>> GetApple()
I have an apple!
>>> from ican.haz import apple
>>> apple.GetApple()
I have an apple!
>>> import ican.haz.apple
>>> ican.haz.apple.GetApple()
I have an apple!
,並根據您的__init__.py
文件,也可能是:
>>> import ican.haz
>>> ican.haz.apple.GetApple()
I have an apple!
>>> import ican
>>> ican.haz.apple.GetApple()
I have an apple!
對於grape.py
,假設相應的類,這種事情會起作用:
>>> from ican.haz.grape.grape import GetGrape
>>> GetGrape()
I have a grape!
它認爲值得指出的是,在Python中,你沒有義務將每個類放在它自己的模塊中(比如你通常在Java中)。如果你的'Apple'和'Grape'類很簡單,你可能想把它們的代碼放在同一個文件中(也許是'ican/has.py'),讓你擺脫很多你的子包。 – Blckknght 2015-03-31 20:11:41