从Java进入Python,我被告知工厂不是Pythonic.因此,我正在寻找一种 Python方法来执行以下操作.(我过分简化了我的目标,所以我不必描述我的整个程序,这非常复杂).
我的脚本将以人名(以及有关它们的一些信息)读取,并从中构建Person类型的对象.名称可能会重复,我只需要每个名称一个Person实例.这些人也可能属于男人和女人的子类.
一种方法是创建一个PersonFactory,它可以返回一个新实例化的Man或Woman,也可以引用之前实例化的具有相同名称的Man/Woman.另一种方法是创建一组所有Person对象,并在实例化一个新对象之前每次检查是否存在具有给定名称的Person.然而,这两种方法都没有像Pythonic那样让我感到震惊.对于Python来说,第一个似乎有点过于繁琐(创建一个完整的类只是为了处理另一个对象的创建?真的吗?)而第二个会很快变得昂贵,因为我有很多名字需要处理.
Ned*_*der 12
我不认为工厂不是Pythonic.但是,你不需要全班.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...
Run Code Online (Sandbox Code Playgroud)
通常,相同的模式在Python代码中起作用,就像在Java中一样,但我们并没有做出如此大的处理.在Java中,你有一个全新的类,它意味着一个全新的.java文件,你需要使它成为单例等等.Java似乎会产生这种复杂性.一个简单的类方法就可以了,所以只需使用它.
| 归档时间: |
|
| 查看次数: |
1355 次 |
| 最近记录: |