Не удается импортировать класс из другого файла в том же каталоге в Python - PullRequest
0 голосов
/ 26 августа 2018

Я новичок в Python и все еще привыкаю к ​​нему.У меня есть проект, который был написан с использованием набора файлов, содержащих только определения функций.Я решил переделать его в ООП-парадигме, вот что происходит:

Тогда у меня было два файла:

Main
 | ---- loggingManager.py
 | ---- servoManager.py

в скрипте servoManager.py, который у меня был:

from loggingManager import *
...
from time import sleep

и все работает нормально.Я могу использовать все функции def ined в loggingManager.py без каких-либо проблем.

Теперь у меня так:

Main
 | ---- Logger.py
 | ---- ConfigurationWrapper.py

Содержимое ConfigurationWrapperэто:

import configparser

class ConfigurationWrapper:
    default_path = '/home/pi/Desktop/Bree/config.ini'

    def __init__(self, path_to_file=None):
        if path_to_file is None:
            path_to_file = self.default_path
...

и Logger выглядит так:

class Singleton(type):
    _instances = {}
    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwarg$
        else:
            cls._instances[cls].__init__(*args, **kwargs)

        return cls._instances[cls]

class Logger():
    __metaclass__ = Singleton

Моя цель здесь состоит в том, чтобы импортировать:

import ConfigurationWrapper

в файл сценария Logger.py, но каждыйКогда я это делаю, я получаю сообщение об ошибке (набирая 'Python Logger' в терминале на MacOS):

Traceback (most recent call last):
  File "Logger", line 1, in <module>
    import ConfigurationWrapper
ImportError: No module named ConfigurationWrapper

Я пытался добавить пустой файл __ init __.py в ту же папку, но все равно ничегослучается.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Я решил, как это было добавить:

execfile("./ConfigurationWrapper")

, но я хотел бы знать, насколько это уместно.

0 голосов
/ 27 августа 2018

Попробуйте добавить точку (.) Перед импортированным модулем

import .ConfigurationWrapper

или импортируйте свой класс

from .ConfigurationWrapper import ConfigurationWrapper

Точка(.) означает, что вы импортируете из того же каталога.

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