Проблема с вложенным пакетом Python - PullRequest
1 голос
/ 01 марта 2012

Я пытался исправить это немного, и мне, должно быть, здесь не хватает чего-то базового (извините, я относительно новичок в разработке на Python):

У меня есть структура пакета, подобная этой:

base
|
 -->util
    __init__.py
    Class1.py
    Class2.py
__init__.py
Main.py

Мои классы довольно мягкие:

class Class1(object):

    def __init__(self):

    # some methods...


class Class2(object):

    def __init__(self):

    # more methods...

В Main.py у меня есть:

import utils

if __name__ == '__main__':
    c1 = utils.Class1()
    c2 = utils.Class2()

Мой PYTHONPATH настроен на включение src, src\base и src\base\utils.Но Python выдает мне эту ошибку при попытке запустить Main.py:

AttributeError: 'module' object has no attribute 'Class1'

Кто-нибудь сталкивался с этим, и знаете ли вы, как это исправить?Спасибо!

Ответы [ 2 ]

5 голосов
/ 01 марта 2012

Это немного отличается от Java. В Java каждый файл обычно является классом, в Python каждый файл является модулем. Учитывая сценарий, который вы описали здесь, вы должны сделать:

import utils.Class1
import utils.Class2

if __name__ == '__main__':
    c1 = utils.Class1.Class1()
    c2 = utils.Class2.Class2()

Вы могли бы сделать несколько вещей здесь. Например, вы могли бы иметь модуль под названием «ресурсы», например:

base ->
    utils ->
        resources.py

, который содержит как Class1, так и Class2. Тогда вы могли бы сделать что-то вроде:

import utils.resources


c1 = utils.resources.Class1()

и т.д.. Но ключ в том, что классы! = Файлы в python

0 голосов
/ 01 марта 2012

импортировали ли вы свои классы в main .py модуля utils? просто добавьте в utils / init .py:

from Class1 import Class1
from Class2 import Class2

тогда в вашем main.py "import utils" импортируют эти файлы как utils.Class1 и т. Д.

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