Есть ли способ иметь пользовательские атрибуты для членов в Python 2.7, как в C #? - PullRequest
0 голосов
/ 13 декабря 2011

Например, в C # я могу сделать следующее, используя отражение:

public class A
{
    object obj1;

    [MyCustumAttribute(data)]
    public object Obj1Property
    { get; set; }

    public A() {}
}

public static void Main(string[] args)
{
    Type t = typeof(a);
    PropertyInfo[] props = t.GetProperties();
    attrs = props[0].GetCustomAttributes();

    //Do something with the properties based on their custom attributes
}

Обратите внимание, что я могу делать то же самое с методами, членами данных и т. Д., А не только со свойствами.

Есть ли способ сделать то же самое в Python 2.7?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2011

Что-то, что может помочь в достижении того, чего вы пытаетесь достичь, это Python-декораторы (обширная информация о декораторах В этом SO-ответе )

Вкратце, они доступны начиная с версии 2.4 и позволяют вам обернуть или украсить функцию. Чтобы определить, есть ли у данной функции декоратор, вы можете попытаться оценить ее с помощью библиотеки functools.

Другим способом, который может помочь вам в этом, поскольку вы хотите украсить класс, являются метаклассы Python

0 голосов
/ 13 декабря 2011

РЕДАКТИРОВАТЬ: Перечитав ваш вопрос, я понял, что аспект отражения не был решен.Ответ все еще нет из того, что я могу найти, хотя.Отражение .NET, похоже, не относится к типам DLR (например, IronPython, IronRuby).Хотя в python есть механизм отражения, который вы можете использовать, см. Подробности в https://stackoverflow.com/a/1447529/635634.

-

Не совсем, но вы можете добиться того жеэффект, используя решение DevHawk .

...