Python импортирует противоречивое поведение - PullRequest
3 голосов
/ 23 июля 2010

У меня есть такой py-файл, который выдает ошибки.

from world import acme

def make_stuff_happen():
    acme.account.foo()       # Works
    acme.subscription.bar()  # FAIL: "module 'object' has no attribute 'subscription'"

make_stuff_happen()

Но это работает!

from world import acme 
from world.acme import subscription

def make_stuff_happen():
    acme.account.foo()  # Works
    subscription.bar()  # Now this works.

make_stuff_happen()

Все, что я могу сказать, это WTF, что может быть причиной этого?Поведение должно быть как минимум согласованным как для acme.account, так и для acme.subscription.

Спасибо!

Обновление - структура папки папки acme:

acme
|-- __init__.py
|-- account.py
|-- catalog.py
|-- core.py
|-- proxy.py
|-- subscription.py
`-- utils.py

И__init__.py полностью пусто.

1 Ответ

6 голосов
/ 23 июля 2010
Субмодули

упоминаются в файле __init__.py в папке модулей. Похоже, что subscription не указан в acme __init__.py.

Однако, когда вы делаете import world.acme.subscription, он знает, что копаться в этой папке, не разговаривая с __init__.py.

Согласно вашему описанию __init__.py как пустое, вы должны import subscription в __init__.py.

Подробнее о настройке модулей см. В документации . Есть довольно хороший пример настройки звукового модуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...