【问题标题】:Python inner container classPython内部容器类
【发布时间】:2018-10-24 10:51:57
【问题描述】:
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 我是新来的课程,但我仍然试图了解如何使用它们,所以问题很可能表明了这种理解。请随时指出这些误解。谢谢

【问题讨论】:

  • 你能(在代码中)展示这应该如何工作,以及出了什么问题?
  • 另外,类名应该是PascalCase,每个PEP8。

标签: python class object inner-classes


【解决方案1】:

我认为这就是您要寻找的。 包含 MyObject 类的多个 实例 的类 Bucket。由于您没有指定 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 class 并在内部实例化 WrapperContainer 的 instance它。

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)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2017-06-30
    • 2019-08-30
    • 2021-09-13
    • 2017-06-15
    • 1970-01-01
    相关资源
    最近更新 更多