我是Python的新手,我正在为api构建一个包装器。我想让用户决定他/她是否想在我从模块中公开的方法上使用装饰器。
例如:
# create a new instance
api = MyApi()
# return a simple json response with all the data related to a timetable
print api.time_table
现在用户拥有所有数据,并且可以执行他/她想要的任何操作。我想添加一些“便利性”#39;方法,例如;让用户获得json的一小部分而不是整个大json响应。
我的想法是为此使用pythons装饰器。我的目标可能是这样的:
# use the method and get al the data
print api.time_table
# Optionally, get a specific part, just the shows part. (PSEUDO CODE BELOW)
@shows
print api.time_table
当然,这不是装饰器的工作原理,但是有没有办法在现有的类方法上选择使用装饰器,或装饰器是否总是必须包装原始方法?
那么这里最恐怖的方式是什么?我真的很想使用装饰器,但如果这是一个不好的主意,我很好,只需创造更多的便利'我的Api
类中的方法。
答案 0 :(得分:3)
您可以选择向API中添加更多方法,或者为用户提供实用程序功能:
from yourmodule import MyAPI
api = MyAPI
filtered_timetable = api.filter_on(something)
或
from yourmodule import MyAPI, filter_timetable
api = MyAPI
filtered_timetable = filter_timetable(api.time_table, something)
请记住,装饰者只是驯服者;语法:
@foo
def bar():
pass
只是语法糖:
def bar():
pass
bar = foo(bar)
调用 foo()
,返回值替换装饰对象。通常你使用装饰函数,但没有什么说你必须使用仅这些函数作为装饰器。
filter_timetable
可能是这样的装饰者;如果你有一个用例将它用作两者。