В псевдоклассических терминах многие лекции учат ключевое слово «this» как объект, созданный конструктором класса или объекта. Каждый раз, когда новый объект строится из класса, представьте, что под капотом создается и возвращается локальный экземпляр «этого» объекта. Я помню, как он учил так:
function Car(make, model, year) {
var this = {}; // under the hood, so to speak
this.make = make;
this.model = model;
this.year = year;
return this; // under the hood
}
var mycar = new Car('Eagle', 'Talon TSi', 1993);
// ========= under the hood
var this = {};
this.make = 'Eagle';
this.model = 'Talon TSi';
this.year = 1993;
return this;
Есть стандартный модуль под названием pkgutil , с помощью которого вы может «добавлять» модули в заданное пространство имен.
С предоставленной вами структурой каталогов:
Package-1/namespace/__init__.py
Package-1/namespace/module1/__init__.py
Package-2/namespace/__init__.py
Package-2/namespace/module2/__init__.py
Вы должны поместить эти две строки в оба Package-1 / namespace / __ init __. py
и Package-2 / namespace / __ init __. Py
(*):
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
(* поскольку - если вы не укажете зависимость между ними - вы не знаете, какой из них будет распознан первым - см. PEP 420 для получения дополнительной информации)
Это добавит к
__ path __
пакета все подкаталоги каталогов наsys.path
назван в честь пакета.
С этого момента вы сможете распространять эти два пакета независимо.
У вас есть концепции пространства имен Python, заданные задом наперед, в python нельзя помещать пакеты в модули. Пакеты содержат модули, а не наоборот.
Пакет Python - это просто папка, содержащая файл __ init __. Py
. Модуль - это любой другой файл в пакете (или непосредственно в PYTHONPATH
) с расширением .py
. Итак, в вашем примере у вас есть два пакета, но не определены модули. Если вы считаете, что пакет - это папка файловой системы, а модуль - это файл, тогда вы поймете, почему пакеты содержат модули, а не наоборот.
Итак, в вашем примере, предполагая, что Package-1 и Package-2 - это папки в файловой системе, которые вы поместили в путь Python, вы можете иметь следующее:
Package-1/
namespace/
__init__.py
module1.py
Package-2/
namespace/
__init__.py
module2.py
Теперь у вас есть одно пространство имен пакета
с двумя модулями module1
и module2
. и если у вас нет веской причины, вам, вероятно, следует поместить модули в папку и иметь только их по пути python, как показано ниже:
Package-1/
namespace/
__init__.py
module1.py
module2.py
Этот раздел должен быть довольно понятным.
Короче говоря, поместите код пространства имен в __ init __. Py
, update setup.py
объявить пространство имен, и вы можете идти.