【发布时间】:2014-08-08 20:10:36
【问题描述】:
我正在编写一个创建/提供各种 Python 装饰器的应用程序。我希望这个应用程序本地化,包括装饰器的名称。装饰器最终会被其他将我的应用用作框架的开发人员使用(将我的应用视为测试框架)。
理想情况下,我希望能够根据本地化设置动态创建装饰器。
例如,如果选择的语言是英语,我希望我的装饰器命名为“apple”,如果是法语,我希望它命名为“pomme”。
在 Python 代码中,它可能看起来像:
@apple
def my_func():
pass
或
@pomme
def my_func():
pass
我最终希望能够灵活地添加更多语言,而无需修改或复制一堆代码。理想情况下,我只有一个装饰器函数可以根据设置处理“apple”或“pomme”。
实现这一目标的最佳方法是什么?
【问题讨论】:
-
装饰器只是遵循特定协议的函数(它们将函数作为参数并返回一个函数)。由于 Python 具有 first-class functions,因此您可以简单地将它们分配给您喜欢的任何名称。如果您想以动态/编程方式执行此操作,您的包的
__init__.py将是一个明显的位置。 -
话虽如此,我建议不要这样做。在我个人看来,源代码,包括变量名、文档和文档字符串,应该是英文的。语言的其余部分是(关键字、语句等),将其与任何母语混合都会使其更难阅读。
-
我同意,不要这样做。用英语编写代码(尽管如果您认为英语作为第二语言的人可能会使用该框架,我建议您翻译文档)。
-
另外考虑一下,您必须为每种语言提供不同的示例代码,因为所有的函数、变量和关键字名称都会不同。
-
感谢您的所有 cmets。 Lukas,您能否详细说明我的包裹中的
__init__.py是如何用于执行此操作的?
标签: python decorator python-decorators