Python内部容器类

时间:2018-10-24 10:51:57

标签: python class object inner-classes

from itertools import count

class myobject(object):
    id=count(0)
    def __init__(self):
        self.ID=next(self.id)
        self.dat=[]

class bucket(object):
    def __init__(self):
        self.container_object=self.Container_object
        class Container_object(object):
            self.container={}
            self.contained_objects=self.container.keys()
        def create_object(myobject):
            self.container[myobject.ID]=object_data

我希望在类存储桶中创建一个容器对象,以便可以在类存储桶中创建myobject的不同实例。

例如,当create_object创建可被访问并包含在类bucket.Container_object和 bucket.Container_object.ID中的新对象时,它将是myobject的实例

PS我是班上的新手,但仍然尝试了解如何使用它们,因此问题很可能表明了这种理解。请随意指出这些误解。谢谢

1 个答案:

答案 0 :(得分:0)

我认为这就是您要寻找的。 一个类存储桶,其中包含MyObject类的多个实例。由于您没有指定Container对象的任何特殊功能,因此我将使用一个简单的字典。

from itertools import count

class MyObject(object):
    id=count(0)
    def __init__(self):
        self.ID=next(self.id)
        self.dat=[]

class Bucket(object):
    def __init__(self):
        self.contained_objects={}

    def add_object(myobject):
        self.contained_objects[myobject.ID]=myobject.dat

如果出于某些原因要将集合包装在其他对象中,则只需在Bucket类之外定义WrapperContainer ,并在内部实例化WrapperContainer的实例它。

from itertools import count

class MyObject(object):
    id=count(0)
    def __init__(self):
        self.ID=next(self.id)
        self.dat=[]

class WrapperContainer(object):
    def __init__(self):
        self.collection = {}

    def add_object(my_object):
        self.collection[myobject.ID]=myobject.dat

    def do_whatever_you_want():
       pass


class Bucket(object):
    def __init__(self):
        self.container_object= WrapperContainer() #a specific instance

    def add_object(myobject):
        self.container_object.add_object(my_object)

最后,您可以将容器类视为已存在集合(列表或字典或其他任何东西)的子类来继承其功能。