从Java到Python,有人告诉我工厂不是Pythonic。因此,我正在寻找
一种
执行以下操作的Python方法。(我过分简化了我的目标,因此不必描述整个程序,这很复杂)。
我的脚本将读取人员名称(以及有关人员的一些信息),并由此构造人员类型的对象。名称可以重复,每个名称只需要一个Person实例。这些人也可能属于男人和女人的子类。
一种实现方法是创建一个PersonFactory,该工厂将返回新实例化的Man或Woman 或 对先前实例化的具有相同名称的Man /
Woman的引用。另一种方法是创建一组所有Person对象,并在实例化新对象之前每次检查是否存在具有给定名称的Person。但是,这两种方法都没有像Pythonic那样令我印象深刻。第一个对于Python来说似乎有点麻烦(创建整个类只是为了处理另一个对象的创建?是吗?),第二个将很快变得昂贵,因为我要处理很多名称。
我认为工厂不是非Python的。但是,您不需要一堂课。Java和Python之间的一大区别是,在Python中,您可以在类之外使用代码。因此,您可能想创建一个工厂函数。或者,您可以使factory成为Person类的类方法:
class Person:
name_map = {}
@classmethod
def person_from_name(cls, name):
if name not in cls.name_map:
cls.name_map[name] = cls(name)
return cls.name_map[name]
def __init__(self, name):
etc...
通常,Python代码中的模式与Java中的模式相同,但是我们并没有做太多的事情。在Java中,您将拥有一个全新的类,这意味着一个全新的.java文件,并且需要将其设置为单例,等等,等等。Java似乎滋生了这种复杂性。一个简单的类方法就可以了,所以就用吧。
Incremental Transcendence 增量超越是一款网页点击/放置类游戏,你需要在其中收集资源、发展自己的家园。 点击可玩 https://static.oschina.net/trytry/Incremental-Transcendence
问题内容: 我刚刚阅读了这篇文章,并且我知道有什么区别。但是我仍然有一个问题。我可以/应该在同一应用程序/网站中使用它吗?假设我希望AngularJs提取内容并更新我的页面,并连接到REST api和所有这些重要内容。但除此之外,我还希望进行实时聊天,或者在收到更新或消息时触发其他客户端上的事件。 Angular支持吗?还是我需要使用Socket.io之类的东西来触发这些事件?两者都使用有意义吗?
主要内容:前言,贫血模型,应用层(即Service层),领域层(或者叫模型层),优点,缺点,充血模型前言 要想深入掌握和了解 DDD 领域驱动设计的核心,那无论如何也绕不开两大较为抽象的概念——“贫血模型”、“充血模型”: 贫血模型即事务脚本模式。 充血模型即领域模型模式。 贫血模型 贫血模型最早广泛应用源于EJB2,最强盛时期则是由Spring创造,将: “行为”(逻辑、过程); “状态”(数据,对应到语言就是对象成员变量)。 分离到不同的对象中: 只有状态的对象就是所谓的“贫血对象”(常称为
5种数据结构组成了Redis的基础,其他没有关联特定数据结构的命令也有很多。我们已经看过一些这样的命令:info, select, flushdb, multi, exec, discard, watch和keys。这一章将看看其他的一些重要命令。 使用期限(Expiration) Redis允许你标记一个关键字的使用期限。你可以给予一个Unix时间戳形式(自1970年1月1日起)的绝对时间,或者
问题内容: 我有一个日志文件,其中使用python记录了一些测试命令及其状态(通过/失败)。现在,我希望测试命令不应写为简单文本,而应写为超链接。这样,当我单击它们时,将打开另一个链接到它们的文件。 例如: 现在,我希望写在logfile.log中的CommandName应该是文件TestCommand.log的超链接,以便当我单击CommandName时,文件TestCommand.log会打开
问题内容: 由于java.lang.Math中的三角函数非常慢:是否有一个可以快速且良好地近似的库?似乎可以更快地进行几次计算而不会损失很多精度。(在我的机器上,乘法需要1.5ns,而java.lang.Math.sin为46ns至116ns)。不幸的是,还没有一种使用硬件功能的方法。 更新:功能应该足够准确,例如,用于GPS计算。这意味着您至少需要7个十进制数字的精度,这排除了简单的查找表。而且