Внешние классы в Python

Я только начинаю Python и хочу использовать внешний класс RSS. Куда мне поместить этот класс и как его импортировать? Я хотел бы в конечном итоге иметь возможность делиться программами на Python.

Ответов (6)

Если вы хотите сохранить свой RSS-файл в другом месте, используйте sys.append ("") и вставьте модуль в этот каталог и используйте импорт или из импорта *

Первый файл, в котором вы создали класс, - это 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.

  1. Модули
  2. Пакеты

Модуль - это просто файл с расширением .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)
from [module] import [classname]

Где модуль находится где-то на вашем пути к Python.

Я не очень люблю отвечать так поздно, но меня не совсем устраивают существующие ответы.

Я только начинаю 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.