如何创建一个特定类型但为空的对象列表?是否可以?我想创建一个对象数组(类型称为 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())
