Каков общий формат заголовка файлов Python?

C # не является ориентированным на АОП языком. У него есть некоторые функции AOP, и вы можете эмулировать некоторые другие, но AOP с C # является болезненным.

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

Как я понимаю, это то, что вы хотите сделать:

[Log()]
public void Method1(String name, Int32 value);

, и для этого у вас есть две основные опции

  1. Наследуйте свой класс от MarshalByRefObject или ContextBoundObject и определите атрибут, который наследуется от IMessageSink. Эта статья имеет хороший пример. Вы должны не считаться с тем, что с помощью MarshalByRefObject производительность будет падать, как черт, и я имею в виду это, я говорю о потерях в 10 раз, поэтому тщательно подумайте, прежде чем пытаться это сделать.
  2. Другой вариант вводить код напрямую. В runtime, то есть вам придется использовать рефлексию для «чтения» каждого класса, получения его атрибутов и ввода соответствующего вызова (и в этом отношении я думаю, что вы не могли использовать метод Reflection.Emit, поскольку я думаю, что Reflection.Emit wouldn 't позволить вам вставлять новый код внутри уже существующего метода). Во время разработки это будет означать создание расширения для компилятора CLR, о котором я честно не знаю, как это делается.

Конечная опция использует IoC framework , Возможно, это не идеальное решение, так как большинство структур IoC работают, определяя точки входа, которые позволяют подключать методы, но, в зависимости от того, что вы хотите достичь, это может быть справедливое aproximation.

462
задан Martin Thoma 28 April 2015 в 10:34
поделиться

2 ответа

Его все метаданные для модуля Foobar .

Первый - это строка документации модуля, которая уже описана в ] Ответ Питера .

Как мне организовать свои модули (исходные файлы)? (Архив)

Первая строка каждого файла должна быть #! / Usr / bin / env python . Это позволяет запускать файл как сценарий, неявно вызывающий интерпретатор, например, в контексте CGI.

Далее должна быть строка документации с описанием. Если описание длинное, первая строка должна быть короткой резюме, которое имеет смысл само по себе, отделенное от остального новой строкой.

Весь код, включая операторы импорта, должен следовать за строкой документации. В противном случае строка документации не будет распознана интерпретатором, и у вас не будет доступа к нему в интерактивных сеансах (например, через obj .__ doc __ ) или при создании документации с помощью автоматических инструментов.

Сначала импортируйте встроенные модули, а затем сторонние модули, а затем любыми изменениями пути и ваших собственных модулей. В частности, дополнения к пути и именам ваших модулей могут быстро измениться: хранение их в одном месте облегчает их поиск.

Затем следует указать информацию об авторстве. Эта информация должна иметь следующий формат:

 __ author__ = "Роб Найт, Гэвин Хаттли и Питер Максвелл" с последующими изменениями пути и ваших собственных модулей.  В частности, дополнения к пути и именам ваших модулей могут быстро измениться: хранение их в одном месте облегчает их поиск. 

Затем следует указать информацию об авторстве. Эта информация должна иметь следующий формат:

 __ author__ = "Роб Найт, Гэвин Хаттли и Питер Максвелл" с последующими любыми изменениями пути и ваших собственных модулей.  В частности, дополнения к пути и именам ваших модулей могут быстро измениться: хранение их в одном месте облегчает их поиск. 

Затем следует указать информацию об авторстве. Эта информация должна иметь следующий формат:

 __ author__ = "Роб Найт, Гэвин Хаттли и Питер Максвелл"
__copyright__ = "Авторские права 2007, The Cogent Project"
__credits__ = [«Роб Найт», «Питер Максвелл», «Гэвин Хаттли»,
 "Мэтью Уэйкфилд"]
__license__ = "GPL"
__version__ = "1.0.1"
__maintainer__ = "Роб Найт"
__email__ = " rob@spot.colorado.edu "
__status__ = "Производство"

Статус обычно должен быть одним из «Прототип», «Разработка» или «Производство». __ сопровождающий __ должен быть человеком, который будет исправлять ошибки и вносить улучшения в случае импорта. __ кредитов __ отличается от __ автора __ тем, что __ кредитов __ включает людей, которые сообщили об исправлениях ошибок, внесли предложения и т. Д., Но на самом деле не написали код.

Здесь

Здесь у вас есть дополнительная информация, перечисление __ автор __ , __ авторы __ , __ свяжитесь с __ , __ авторское право __ , __20629] __20629 __] [ ] __ не рекомендуется __ , __ date __ и __ версия __ как распознанные метаданные.

542
ответ дан 22 November 2019 в 22:47
поделиться

Также см. PEP 263 , если вы используете набор символов, отличный от ascii

Аннотация

Этот PEP предлагает ввести синтаксис для объявления кодировки исходный файл Python. Информация о кодировке затем используется Парсер Python для интерпретации файла с использованием заданной кодировки. Наиболее в частности, это улучшает интерпретацию литералов Unicode в исходный код и позволяет писать литералы Unicode используя, например, UTF-8 непосредственно в редакторе, поддерживающем Unicode.

Проблема

В Python 2.1 литералы Unicode могут быть записаны только с использованием Кодировка на основе Latin-1 "unicode-escape". Это делает среда программирования довольно недружелюбна к пользователям Python, которые живут и работать в регионах, отличных от Latin-1, например, во многих азиатских страны. Программисты могут писать свои 8-битные строки, используя любимая кодировка, но привязаны к кодировке "unicode-escape" для литералов Unicode.

Предлагаемое решение

Я предлагаю сделать кодировку исходного кода Python как видимой, так и можно изменять для каждого исходного файла с помощью специального комментария в верхней части файла, чтобы объявить кодировку.

Чтобы Python знал об этом объявлении кодировки, ряд необходимы изменения концепции в отношении обращения с Данные исходного кода Python.

Определение кодировки

Python по умолчанию будет использовать ASCII в качестве стандартной кодировки, если нет другой даны подсказки по кодированию.

Чтобы определить кодировку исходного кода, магический комментарий должен помещать в исходные файлы как первый или второй строка в файле, например:

  # coding = <имя кодировки>

или (с использованием форматов, признанных популярными редакторами)

  #! / Usr / bin / python
 # - * - кодировка: <название кодировки> - * -

или

  #! / Usr / bin / python
 # vim: set fileencoding = <имя кодировки>:

...

22
ответ дан 22 November 2019 в 22:47
поделиться
Другие вопросы по тегам:

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