【问题标题】:How to get argument type hint in decorator?如何在装饰器中获取参数类型提示?
【发布时间】:2017-11-15 11:45:26
【问题描述】:

我该怎么做:

import typing

def needs_parameter_type(decorated):
    def decorator(*args):
        [do something with the *type* of bar (aka args[0]), some_class]
        decorated(*args)
    return decorator

@needs_parameter_type
def foo(bar: SomeClass):
    …

foo(…)

用例是为了避免下面的重复:

@needs_parameter_type(SomeClass)
def foo(bar: SomeClass):
    …

【问题讨论】:

标签: python python-3.5


【解决方案1】:

这些存储在函数的__annotations__ 属性中,您可以通过以下方式访问它们:

def needs_parameter_type(decorated):
    def decorator(*args):
        print(decorated.__annotations__)
        decorated(*args)
    return decorator

@needs_parameter_type
def foo(bar: int):
   pass

foo(1)
#  {"bar": <class "int">}

【讨论】:

    猜你喜欢
    • 2016-11-13
    • 2022-08-15
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 2018-04-14
    • 2021-11-27
    • 2019-09-24
    相关资源
    最近更新 更多