2014-02-13 3 views
0

В одном файле я создаю класс Robot, но когда я пытаюсь создать объект этого класса в другом файле, он говорит: 'module' объект не имеет атрибута 'Robot'Создайте объект Python из другого .py файла

main.py

import robot as rob 
robot=rob.Robot() 

robot.py

class Robot(object): 

    def __init__(self): 
    return 0 
    def otherFunctions(): 
    return 0 

И он говорит: 'модуль' объект не имеет атрибута 'Robot'. Где я делаю ошибку?

+3

Возможно, вы импортируете другой 'robot.py'. Добавьте инструкцию печати вверху robot.py, чтобы убедиться, что она правильная. Или проверьте 'rob .__ file__' – mhlester

+0

Возможно, это также проблема циклического импорта, если один из файлов имеет импорт, который мы не видим. – user2357112

+0

У robot.py нет другого импорта. и main.py имеет много, я могу их здесь –

ответ

4

Путь ваш код написан правильно (за исключением удаления вы предположительно сделали для лаконичности)

Когда вы import, Python проверяет sys.path для импорта местоположений и импортирует первыйrobot он может найти.

несколько способов решить эту проблему:


import robot 
print robot.__file__ 

в robot.py

print("hello!") 

import sys 
sys.path.insert('/path/to/correct/robot/') 
import robot 
+0

Странно, потому что похоже, что он импортировал правильный robot.py –

+0

Когда вы добавляете оператор 'print', что происходит? – mhlester

1

Похоже, что синтаксис в файле robot.py неверен. Вы можете исправить ошибки в наиболее прямом пути, изменив файл robot.py выглядеть следующим образом:

class Robot(object): 
    def __init__(self): 
     pass 

    def other_functions(self): 
     pass 

Обратите внимание, что я использовал змеиную оболочку для функции other_functions. Не используйте camelCasing в Python. Это не идиоматично. Кроме того, я добавил аргумент self в other_functions, поэтому вы не получите TypeError, если попытаетесь вызвать его из экземпляра Robot.

Кроме того, если ваш код не так прост, как вы его представляете, ошибка может возникать из циклического импорта. Убедитесь, что вы не пытаетесь импортировать два модуля друг из друга, прежде чем у них будет возможность полностью выполнить.

+1

Это верно для его опубликованного кода, но на самом деле это не может быть его проблемой (он получал исключение при импорте, прежде чем он мог даже добраться до того, о котором он спрашивает), поэтому, по-видимому, это не относится к его фактическому коду. – abarnert

+0

Да, в идеале вы получите необработанное исключение, такое как SyntaxError. Однако я не уверен, можете ли вы полностью положиться на это. Я был свидетелем некоторых случаев, когда то, что выглядело как синтаксическая ошибка (и на самом деле было в смысле того, что она была опечаткой для меня), на самом деле была понятной и приводила к тому, что объект не был доступен там, где я его ожидал. Это не очень вероятно, но все равно может произойти. –

+0

Несомненно, бывают случаи, когда вещи, похожие на синтаксические ошибки, отсутствуют. Но это не так. – abarnert

Смежные вопросы