python: возможна ли декоратор для аргументов метода? - PullRequest
3 голосов
/ 25 мая 2011

Можно ли украсить аргументы метода?Что-то вроде:

class SampleEntity (BaseEntity) :
    def someOperation (self, @Param(type="int", unit="MB")i, str) :
        pass

По сути, я хочу, чтобы разработчик мог указывать метаданные о классе, свойствах, методах, аргументах и ​​т. Д., Которые я могу обработать позже.Для класса и методов я мог бы использовать декораторы.Поэтому мне было интересно, как это сделать для аргументов метода.

Спасибо, Литти

Ответы [ 5 ]

8 голосов
/ 25 мая 2011

Нет, но в Python 3 вы можете использовать аннотации .

def func(arg: Param(type = 'int', unit = 'MB')):
   pass

Аннотации могут содержать любую информацию, которую вы хотите, язык не определяет, что должно идти туда.Вы можете получить к ним доступ через func.__annotations__ dict позже.

4 голосов
/ 25 мая 2011

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

Если это более конкретная информация, которую вы позже сможете использовать в своих приложениях, вы можете использовать enthought traits .

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

3 голосов
/ 25 мая 2011

Нет. Вы можете декорировать функции и классы, но не параметры.

1 голос
/ 25 мая 2011

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

Например:

def dostuff(f: str, x: "Hula hula!"):
     pass
1 голос
/ 25 мая 2011

Невозможно поместить декоратор в список параметров, он должен находиться вокруг функции или класса.

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

...