我需要遍历对象内的许多属性。每个属性都初始化为None,在程序过程中每个属性都会存储一个单独的对象。我需要迭代16个属性,条件是属性将按预定顺序存储对象。例如,如果属性10为空,则属性11到16也将为空,因此我不需要迭代任何空属性。我的初步结果是对每个属性使用'if'语句,如下所示:
Class Object1:
def __init__(self):
self.attribute1=None
self.attribute2=None
self.attribute3=None
self.attribute4=None
...
def repeating_function(self):
if self.attribute1!=None:
self.attribute1.attribute=Callback1
if self.attribute2!=None:
self.attribute2.attribute=Callback2
if self.attribute3!=None:
self.attribute3.attribute=Callback3
...
但是,由于属性存储对象的顺序,我最终得到了这个:
class Object1:
def __init__(self):
self.attribute1=None
self.attribute2=None
self.attribute3=None
self.attribute4=None
self.attribute5=None
def repeating_function(self):
if self.attribute1!=None:
self.attribute1.attribute=Callback1
if self.attribute2!=None:
self.attribute2.attribute=Callback2
if self.attribute3!=None:
self.attribute3.attribute=Callback3
...
基本上,我的问题是:如果第二个例子在迭代非空属性时效率更高。因为我在第二个例子中添加了条件,我不确定哪种方法更有效。
答案 0 :(得分:1)
您应该使用列表而不是单独的属性:
class MyClass(object):
def __init__(self):
self.attributes = []
有了这个,
self.attributes.append(...)
; None
)属性,请使用len(self.attributes)
; None
属性,使用self.attributes[-1]
; 等等。