我发现自己经常创建一组命名对象,其中每个对象都有唯一的名称。我将它们实现为dict,其键是从派生的。但是,将名称保留在两个地方有点笨拙。

我的典型方法如下所示:

class NamedObject(object):
    ITEMS = {}

    def __init__(self, name, ...other arguments...):
        self.name = name
        ...more initialization...

    @classmethod
    def create_named_object(cls, name, ...other arguments...):
        obj = cls(name, ...other arguments...)
        cls.ITEMS[name] = obj

    @classmethod
    def find_object_by_name(cls, name):
        return cls.ITEMS.get(name, None)

    @classmethod
    def filter_objects(cls, predicate):
        return [e for e in cls.ITEMS.values() if predicate(e)]


我知道我可以创建一个通用类来处理此问题,但是有没有更自然的Pythonic方式可以做到这一点?

最佳答案

标准库中没有更多的通用支持,没有,也没有比使用字典更多的“ Pythonic”方式来实现这一点。

您正在做的是提供lookup table index,索引通常需要一些重复的数据。您正在为访问速度交换内存。但是索引是特定于用例的,或者通过映射轻松实现,或者对于应用程序而言过于具体,以至于无法推广到将其添加到语言库中变得有意义的程度。

至少在Python中,名称的字符串值实际上并未重复;您只需添加更多引用即可;一次来自实例,另一次来自ITEMS字典。

关于python - 在Python中创建一组命名对象的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53032225/

10-12 22:07