Как определить приложенный тип из пользовательского атрибута?

Существует PEP 570 , который является всего лишь черновиком, поэтому нельзя создавать только позиционные аргументы в чистом Python. Однако это можно сделать с помощью функции, написанной на C для Python.

5
задан Mark Ingram 9 November 2008 в 11:57
поделиться

4 ответа

Прежде всего Вы могли бы рассмотреть существующее [DisplayName] для хранения дружественных имен. Как был уже покрыт, Вы просто не можете получить эту информацию в атрибуте. Можно искать атрибут от Панели, но в целом, единственный способ сделать это от атрибута состоял бы в том, чтобы передать тип в атрибут - т.е.

[Foo("Some name", typeof(Bar)]

Что точно это, Вы хотите сделать? Могут быть другие опции...

Обратите внимание на это i18n, resx, и т.д.; можно разделить на подклассы DisplayNameAttribute и обеспечьте поиск от ключей путем переопределения DisplayName метод считывания.

5
ответ дан 13 December 2019 в 22:19
поделиться

От Вашего предложения "Я просто хочу определить дружественное имя с помощью отражения", я думаю, что Вы хотите определить имя "MyFriendlyNameForThisClass" к атрибуту во времени выполнения. если так, я не думаю, что это возможно. Посмотрите этот поток.

1
ответ дан 13 December 2019 в 22:19
поделиться

Уточнить. Атрибут, встроенный или пользовательский, является просто метаданными для класса, или участником класса и самим атрибутом nas никакая нотация, что это связывается с чем-то.

  • Тип знает метаданные сами по себе
  • Метаданные (в этом случае, атрибут) не знают, кому это принадлежит
3
ответ дан 13 December 2019 в 22:19
поделиться

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

1
ответ дан 13 December 2019 в 22:19
поделиться
Другие вопросы по тегам:

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