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

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

5 голосов
/ 28 февраля 2009

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

Ответы [ 6 ]

15 голосов
/ 01 марта 2009

Об операторе import:

(хорошая рецензия на http://effbot.org/zone/import-confusion.htm, а урок по питону подробно описан на 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)
2 голосов
/ 01 марта 2009

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

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

Вы помещаете его в файл python и даете файлу python расширение .py. Затем вы можете импортировать модуль, представляющий этот файл, и получить доступ к классу. Предположим, что вы хотите импортировать его, вы должны поместить файл python где-нибудь в вашем пути поиска импорта - вы можете увидеть это во время выполнения с sys.path, и, возможно, самое важное, что нужно знать, это то, что site-package (установить -specific) и текущий каталог ('') обычно находятся в пути поиска импорта. Когда у вас есть один однородный проект, вы обычно помещаете его в тот же каталог, что и другие модули, и позволяете им импортировать друг друга из одного каталога.

Я бы хотел в конечном итоге поделиться программами на Python.

После того, как вы настроили его как отдельный файл, вы можете настроить его для распространения с помощью distutils . Таким образом, вам не нужно беспокоиться о том, где именно он должен быть установлен - distutils будет беспокоиться за вас. Существует также много других дополнительных средств распространения, многие из которых зависят от ОС - distutils работает для модулей, но если вы хотите распространять правильную программу, которую должны запускать пользователи, существуют другие варианты, такие как py2exe для Windows.

Что касается различий между модулями и пакетами, то здесь все в порядке. Если у вас есть целая куча классов, которые вы хотите разделить, чтобы у вас не было большого беспорядка в файле python, вы можете разделить его на несколько файлов python в каталоге и присвоить каталогу __init__.py , Важно отметить, что от Python нет никакой разницы между пакетом и любым другим модулем. Пакет - это модуль, это просто другой способ его представления в файловой системе. Точно так же модуль - это , а не , просто файл .py - если бы это было так, sys не был бы модулем, поскольку у него нет файла .py. Он встроен в переводчик. Существует бесконечно много способов представления модулей в файловой системе, поскольку вы можете добавить ловушки импорта, которые могут создавать способы представления модулей, отличные от каталогов и файлов .py. Можно гипотетически создать ловушку для импорта, которая использует spidermonkey для загрузки файлов Javascript в качестве модулей Python.

1 голос
/ 01 марта 2009

О модулях и пакетах:

  • модуль - это файл, заканчивающийся .py. Вы можете поместить свой класс в такой файл. Как сказал Энди, он должен быть в вашем пути к Python (PYTHONPATH). Обычно вы помещаете дополнительный модуль в тот же каталог, в котором находится ваш скрипт, который можно импортировать напрямую.

  • пакет - это каталог, содержащий __init__.py (может быть пустым) и содержащий файлы модулей. Затем вы можете импортировать а-ля from <package>.<module> import <class>. Опять же, это должно быть на вашем пути к Python.

Вы можете найти больше в документации .

1 голос
/ 28 февраля 2009
from [module] import [classname]

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

0 голосов
/ 12 сентября 2017

Первый файл, в котором вы создали класс, это «first.py»

first.py:

class Example:
   ...

Вы создаете второй файл, в котором вы хотите использовать класс, содержащийся в «first.py», то есть «second.py»

myprogram/first.py
myprogram/second.py

Затем во втором файле, чтобы вызвать класс, содержащийся в первом файле, вы просто набираете:

second.py:

from first import Example
...
0 голосов
/ 04 марта 2013

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

...