Вы путаете два понятия. Python «module» - это файл, содержащий код Python, который можно импортировать. «Класс» python - это то, что можно определить в модуле. В данном примере 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