Ответов (6)6
Первый файл, в котором вы создали класс, - это first.py.
first.py:
class Example:
...
Вы создаете второй файл, в котором хотите использовать класс, содержащийся в "first.py", то есть "second.py".
myprogram/first.py
myprogram/second.py
Затем во втором файле, чтобы вызвать класс, содержащийся в первом файле, вы просто набираете:
second.py:
from first import Example
...
О модулях и пакетах:
модуль - это файл, заканчивающийся на
.py
. Вы можете поместить свой класс в такой файл. Как сказал Энди, он должен быть в вашем пути python (PYTHONPATH
). Обычно вы помещаете дополнительный модуль в тот же каталог, что и ваш скрипт, который можно напрямую импортировать.пакет - это каталог, содержащий
__init__.py
(может быть пустым) и файлы модулей. Затем вы можете импортировать а-ляfrom <package>.<module> import <class>
. Опять же, это должно быть на вашем пути к Python.
Вы можете найти больше в документации .
О import
заявлении:
(хорошая запись находится на http://effbot.org/zone/import-confusion.htm, а руководство по python подробно описано на http://docs.python.org/tutorial/modules.html )
Есть два обычных способа импортировать код в программу Python.
- Модули
- Пакеты
Модуль - это просто файл с расширением .py. Для python он должен существовать в пути поиска (как определено в sys.path). Путь поиска обычно состоит из того же каталога запущенного .py и системных каталогов python.
Учитывая следующую структуру каталогов:
myprogram/main.py
myprogram/rss.py
Из main.py вы можете «импортировать» классы rss, выполнив:
import rss
rss.rss_class()
#alternativly you can use:
from rss import rss_class
rss_class()
Пакеты предоставляют более структурированный способ содержать более крупные программы на Python. Это просто каталог, который содержит, __init__.py
а также другие файлы Python.
Пока каталог пакета включен sys.path
, его можно использовать точно так же, как указано выше.
Чтобы найти ваш текущий путь, запустите это:
import sys
print(sys.path)
Я не очень люблю отвечать так поздно, но меня не совсем устраивают существующие ответы.
Я только начинаю Python и хочу использовать внешний класс RSS. Куда мне поместить этот класс и как его импортировать?
Вы помещаете его в файл python и даете файлу python расширение .py. Затем вы можете импортировать модуль, представляющий этот файл, и получить доступ к классу. Предположим, вы хотите импортировать его, вы должны поместить файл python где-нибудь в пути поиска импорта - вы можете увидеть это во время выполнения sys.path
, и, возможно, наиболее важная вещь, которую нужно знать, это то, что пакеты сайта (для конкретной установки) и текущий каталог ('') обычно находятся в пути поиска импорта. Когда у вас есть один однородный проект, вы обычно помещаете его в тот же каталог, что и другие модули, и позволяете им импортировать друг друга из одного каталога.
Я хотел бы в конечном итоге иметь возможность делиться программами на Python.
После того, как вы настроили его как отдельный файл, вы можете настроить его для распространения с помощью distutils . Таким образом, вам не нужно беспокоиться о том, где именно он должен быть установлен - distutils будет беспокоиться за вас. Также есть много других дополнительных средств распространения, многие специфичные для ОС - distutils работает для модулей, но если вы хотите распространять правильную программу, которую должны запускать пользователи, существуют другие варианты, такие как использование py2exe для Windows.
Что касается различия модулей / пакетов, то вот оно. Если у вас есть целая группа классов, которые вы хотите разделить, чтобы у вас не было одного большого беспорядка в файле python, вы можете разделить его на несколько файлов python в каталоге и присвоить каталогу __init__.py
. Важно отметить, что в Python нет разницы между пакетом и любым другим модулем. Пакет - это модуль, это просто другой способ его представления в файловой системе. Точно так же модуль - это не просто файл .py - если бы это было так,sys
не будет модулем, поскольку у него нет файла .py. Он встроен в интерпретатор. Существует бесконечно много способов представления модулей в файловой системе, поскольку вы можете добавлять ловушки импорта, которые могут создавать способы, отличные от каталогов и файлов .py, для представления модулей. Гипотетически можно было бы создать ловушку импорта, которая использовала бы spidermonkey для загрузки файлов Javascript как модулей Python.