在Python中超越工厂
从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似乎滋生了这种复杂性。一个简单的类方法就可以了,所以就用吧。
以上是 在Python中超越工厂 的全部内容, 来源链接: utcz.com/qa/400425.html