我发现自己经常创建一组命名对象,其中每个对象都有唯一的名称。我将它们实现为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/