【发布时间】:2018-02-21 12:40:44
【问题描述】:
我想构建一个容器来存储对象,并且我想限制容器只存储相同类型的对象(类型未先验定义)和不同的属性(例如,name 在下面的示例中,所以它可能是一个索引)。
以下是假设容器派生自list 对象的预期行为示例。
obj1 = Foo(name='Jon')
obj2 = Foo(name='Doe')
obj3 = Foo(name='Jon')
obj4 = Bar(name='Bob')
>>> MyContainer()
[]
>>> MyContainer([obj1, obj2])
[Foo(name='Jon'), Foo(name='Doe')]
>>> MyContainer([obj1, obj4])
TypeError: mixed types
>>> MyContainer([obj1, obj3])
ValueError: Same 'name' attribute
无论使用哪种方法填充容器,我都希望这种行为保持不变:__init__、__add__、__iadd__、append、...
但是,如果可能的话,我希望一个空容器可以容纳任何类型,只要它都是一样的。
我想知道实施它的正确方法应该是什么,我正在寻找建议。到目前为止,我考虑过从list 派生它并重写方法,但我对此感到不舒服。我应该装饰它吗?我应该从头开始构建一个容器吗?是否已经有适合我目的的现有容器(一种 dict 或 pandas.Dataframe)?
【问题讨论】:
-
你为什么需要这个?
-
也许 ``collections.abc.MutableSequence` 可能是一个很好的起点......
-
@internet_user 我可以使用这样的容器来简化一段很长的代码,我使用
list以这种方式存储对象。我有很多容器,但都包含相同类型的对象,其属性只能是唯一的。
标签: python oop containers