我想创建一个包含其他对象的对象,并在它拥有的每个对象上调用一个方法。最终目标是为程序生成脚本。每个对象都包含一个可以使用printCommand()
打印的命令,最终可以打印到文件中。我最初的解决方案是:
a = ObjectList()
a.appendObject(Object())
b = ObjectList()
b.appendObject(Object())
listOfObjects = [a, b]
for Object in listOfObjects:
Object.printCommand()
我创建一个列表变量,将对象添加到列表中,然后循环发出命令。虽然这很有效,但我主要是为了自学编程,所以我想知道是否有更优雅的解决方案,而不是编写代码来追加,弹出等项目到对象中的列表。由于list
已经包含这些函数,我认为正确的做法是扩展list
:
class Object:
def __init__(self):
self.Command = "Script Command"
def printCommand(self):
print(self.Command)
class ObjectList(list):
def printCommand(self):
for Object in self.LISTCONTENTS:
Object.printCommand()
然而,我不知道如何告诉它迭代自己的内容。什么属于self.LISTCONTENTS
? list
对象在哪里存储其内容,以及如何从方法中访问它们?
答案 0 :(得分:1)
(a)不要创建一个名为Object
的类,它离object
太近了。
(b)绝对没有必要继承list
,坦率地说,我怀疑是否需要使用自己的课程。
(c)在列表的每个元素上调用函数的常规方法是使用map
。如果需要重复映射相同的函数,可以使用partial
将该函数绑定到map
的第一个参数。
现在去看一下文档。
答案 1 :(得分:1)
您可以迭代self
:
超类方法(即__iter__()
)都存在。在 for 语句的上下文中说self
将导致调用相应的方法。
class Object:
def __init__(self):
self.Command = "Script Command"
def printCommand(self):
print(self.Command)
class ObjectList(list):
def printCommand(self):
for Object in self:
Object.printCommand()
lst = ObjectList()
lst.append(Object())
lst.append(Object())
lst.printCommand()
这种工作方式是list
实现__iter__
,在迭代对象时在幕后调用:
>>> for e in [1,2,3].__iter__():
... print(e)
...
1
2
3
>>> for e in [1,2,3]:
... print(e)
...
1
2
3