Кажется, что нет способа сделать это, используя пространства имен самостоятельно (если вы не хотите использовать Модуль Augmentation и declare
каждый новый элемент, чтобы добавить отдельно); однако пространство имен может быть частью класса, который может быть расширен! Это лучшая альтернатива, которую я могу найти:
CoreLibraryTypes.ts
abstract class Types { }
namespace Types {
export class TypeA { }
export class TypeB { }
export class TypeC { }
}
export { Types };
CoreTypesExtended.ts
import CoreLibraryTypes from "./CoreLibraryTypes";
abstract class Types extends CoreLibraryTypes { }
namespace Types {
export class TypeD { }
export class TypeE { }
export class TypeF { }
}
export { Types };
[1110 Недостатком, конечно, является то, что только при импорте второго модуля будут добавлены новые типы. Первый модуль останется прежним. В идеале было бы неплохо «обновить» пространство имен типов дополнительными типами (например, из плагинов), чтобы расширение модуля поддерживалось более естественным образом (вместо того, чтобы писать его вручную), но я думаю, что это нужно делать до кто-то понимает, что расширение модулей путем ручного объявления обновленных определений - это всего лишь пол-$ способ сделать то, что пространства имен уже делают (включая классы, как показано выше, которые уже могут использовать слияние пространства имен как часть класса). ;)
Примечание: в приведенном выше примере я использовал export { Types };
по причине - это позволит другим дополнить мои модули. Аугментация не поддерживается для экспорта по умолчанию (если это не нужно - сортируйте его практически).
Вы можете найти тысячи примеров с открытым исходным кодом, например, с помощью поиска кода Google , вот он:
http://www.google.com/codesearch?hl=en&lr=&q="imp.find_module"+"imp.load_module"&sbtn=Search
Изменить: как уточнил спрашивающий, он ищет пример реализация, а не использование, лучший URL для поиска:
http://www.google.com/codesearch?hl=en&sa=N&q="path_hooks"++lang:python&ct=rr&cs_r=lang:python
Один читаемый пример (хотя НЕ подходит для производственного использования, как указано в обсуждении reddit !): ] urlimport .
Что касается одновременной поддержки Python 2 и Python 3, это звучит амбициозно - я не знаю ни одной существующей ловушки импорта, которая бы претендовала на это. На вашем месте я бы начал с предложения полной поддержки Python 2.6, а затем, как только он заработает (и будет иметь хороший набор тестов и даже не пойдет с переключателем -3
), я