Пример PEP 302: новые рычаги импорта

Кажется, что нет способа сделать это, используя пространства имен самостоятельно (если вы не хотите использовать Модуль 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 }; по причине - это позволит другим дополнить мои модули. Аугментация не поддерживается для экспорта по умолчанию (если это не нужно - сортируйте его практически).

12
задан Andrzej Doyle 4 November 2009 в 11:23
поделиться

1 ответ

Вы можете найти тысячи примеров с открытым исходным кодом, например, с помощью поиска кода 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 ), я

3
ответ дан 2 December 2019 в 23:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: