Python внутренний контейнерный класс - PullRequest
0 голосов
/ 24 октября 2018
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 IЯ новичок в классах и все еще пытаюсь понять, как я могу их использовать, поэтому, скорее всего, вопрос показывает это понимание.Пожалуйста, не стесняйтесь указывать на эти недоразумения.спасибо

1 Ответ

0 голосов
/ 24 октября 2018

Я думаю, это то, что вы ищете.Класс Bucket, который содержит несколько экземпляров класса MyObject.Поскольку вы не указываете какие-либо особенности вашего объекта-контейнера, я буду использовать простой словарь.

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

Если вы хотите по некоторым причинам обернуть коллекцию в какой-то другой объект, вы просто определяете WrapperContainer класс вне класса Bucket и просто создание экземпляра экземпляра 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)

Наконец, вы можете думать о своем классе контейнера как о подклассеуже существующая коллекция (список или словарь или что-то еще), чтобы наследовать его функции.

...