Skip to main content
 首页 » 编程设计

python之如何创建特定类型但为空的列表

2025年05月04日14birdshome

如何创建一个特定类型但为空的对象列表?是否可以?我想创建一个对象数组(类型称为 Ghosts),稍后将包含从那个称为 Ghosts 的类继承的不同类型。在 C++ 中这一切都非常简单,但我不确定如何在 python 中做到这一点。我试过这样的事情:

self.arrayOfGhosts = [[Ghost() for x in xrange(100)] for x in xrange(100)] 

但是它已经被对象初始化了,我不需要它,有没有办法用 0 初始化它但有一个 Ghost 类型的列表?

如您所见,我是 Python 的新手。任何帮助将不胜感激。

请您参考如下方法:

Python 是一种动态语言,因此没有类型数组 的概念。
您创建一个空的通用列表:

self.arrayOfGhosts = [] 

您不必关心列表的容量,因为它也是动态分配的。
您可以根据需要使用任意数量的 Ghost 实例填充它:

self.arrayOfGhosts.append(Ghost()) 

上面这些真的够了,不过:
如果你真的想强制这个列表只接受 Ghost 和继承类实例,你可以像这样创建一个自定义列表类型:

class GhostList(list): 
 
    def __init__(self, iterable=None): 
        """Override initializer which can accept iterable""" 
        super(GhostList, self).__init__() 
        if iterable: 
            for item in iterable: 
                self.append(item) 
 
    def append(self, item): 
        if isinstance(item, Ghost): 
            super(GhostList, self).append(item) 
        else: 
            raise ValueError('Ghosts allowed only') 
 
    def insert(self, index, item): 
        if isinstance(item, Ghost): 
            super(GhostList, self).insert(index, item) 
        else: 
            raise ValueError('Ghosts allowed only') 
 
    def __add__(self, item): 
        if isinstance(item, Ghost): 
            super(GhostList, self).__add__(item) 
        else: 
            raise ValueError('Ghosts allowed only') 
 
    def __iadd__(self, item): 
        if isinstance(item, Ghost): 
            super(GhostList, self).__iadd__(item) 
        else: 
            raise ValueError('Ghosts allowed only') 

然后对于二维列表,您可以像这样使用此类:

self.arrayOfGhosts = [] 
self.arrayOfGhosts.append(GhostList()) 
self.arrayOfGhosts[0].append(Ghost())