首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪种方式是Python工厂注册的理想方式?

哪种方式是Python工厂注册的理想方式?
EN

Stack Overflow用户
提问于 2018-06-27 23:58:42
回答 1查看 1.2K关注 0票数 5

这是一个关于哪一种方法会被认为是最毕达通的问题。我不是在寻找个人意见,而是,什么是惯用的。我的背景不是Python,所以这将对我有帮助。

我正在处理一个Python 3项目,它是可扩展的。这个想法与工厂模式相似,只是基于功能。

本质上,用户将能够创建一个定制函数(跨包和项目),我的工具可以定位并动态调用该函数。它还可以使用currying传递参数(但这里不包括该代码)。

我的目标是要遵循好的毕达通实践。我在两种策略之间左右为难。而且,由于Python不是我的专长,我想知道以下实践的优缺点:

  1. 使用装饰器 注册= {} def阶乘(名称):def __inner_factory_function( fn ):寄存器名= fn返回fn返回__inner_factory_function def get_function(名称):返回寄存器名 然后,下面的函数自动注册. @factoried('foo') def build_foo():print('hi') 这似乎是合理的,但对那些不熟悉装饰师的人来说确实有点神奇。
  2. 抽象类的强制子类,并使用 如果使用子类,则不需要注册。然而,当一个完整的类可能没有必要时,我觉得这会强制定义类。此外,.__subclasses__()在引擎盖下的使用对消费者来说也是不可思议的。但是,即使是Java也可以用来搜索带有注释的类。
  3. 显式注册 忘记以上所有内容,强制显式注册。没有装饰师。没有子类。就像这样: def build_foo():#.factory.register('foo',build_foo)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-28 00:07:43

这个问题没有答案。

Python所提倡的唯一标准实践是PEP 8

PEP 8与更高层次的“设计模式”问题几乎没有什么关系,特别是与你的具体问题无关。

而且,即使是这样,PEP 8显然只是“主要Python发行版中包含标准库的代码”的一个指南,Guido拒绝了让它成为应该在每个Python项目上强制执行的某种广泛标准的建议。

另外,这也使我们明白了这只是一个准则,而不是一个僵硬的建议的观点。

当然,选择一种设计而不是另一种设计是有主观原因的。

理想情况下,这些主观的原因通常是由社区对什么是“惯用”或"pythonic“的共识驱动的。但是,社区共识并没有作为你可以引用的一些客观来源而被记录下来。

也许有一些争论对Python的禅宗有吸引力,但这本身就是提姆·彼得斯试图将吉多自己的主观准则提炼成一组简洁的声音片段,而不是一个客观的来源。(任何人只要简单地看一看,例如,python-ideas列表,就会发现几乎任何问题的双方都可以吸引禅宗…)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51072941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档