gpt4 book ai didi

java - 超越 Python 中的工厂

转载 作者:太空狗 更新时间:2023-10-29 21:17:03 32 4
gpt4 key购买 nike

从 Java 转向 Python,有人告诉我工厂不是 Pythonic。因此,我正在寻找 a Python 方法来执行如下操作。 (我过度简化了我的目标,这样我就不必描述我的整个程序,这非常复杂)。

我的脚本将读入人名(以及有关他们的一些信息),并据此构造 Person 类型的对象。名称可能会重复,我只希望每个名称有一个 Person 实例。这些人也可能属于男人和女人的子类。

实现此目的的一种方法是创建一个 PersonFactory,它将返回一个新实例化的男人或女人对先前实例化的具有相同名称的男人/女人的引用。另一种方法是创建一组所有 Person 对象,并在每次实例化新对象之前检查是否存在具有给定名称的 Person。不过,这两种方法都不让我觉得是 Pythonic。第一个对于 Python 来说似乎有点太麻烦了(创建一个完整的类只是为了处理另一个对象的创建?真的吗?)第二个很快就会变得昂贵,因为我有很多名字要处理。

最佳答案

我不认为工厂是非 Pythonic 的。不过,您不需要整个类(class)。 Java 和 Python 之间的一大区别是,在 Python 中,您可以在类之外编写代码。所以你可能想创建一个工厂函数。或者您可以使工厂成为 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 似乎滋生了这种复杂性。一个简单的类方法就可以了,所以就用它吧。

关于java - 超越 Python 中的工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3571773/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com