我对python中的类很新,所以请保持温和。我的脚本比这更复杂,但这基本上归结为:
class primary_state:
def __init__(self,x,y,z):
self.x = x
self.y = y
self.z = z
self.substates=[]
def add_substate(self,i,j,k):
self.substates.append(self.substate(i,j,k))
class substate:
def __init__(self,i,j,k):
self.i = i
self.j = j
self.k = k
state = primary_state(1,2,3)
state.add_substate(4,5,6)
state.add_substate(7,8,9)
现在我的问题是:是否可以从每个对象返回一个值数组?例如,我想做:
state.substates[:].i
并让它返回值4和7,但是alas子类是一个列表,所以它无法处理它。还必须有一种更有效的方法来做到这一点,但我还没有想到这一点。任何建议/想法将不胜感激!感谢。
答案 0 :(得分:4)
[sub.i for sub in state.substates]
这大致等同于以下内容:
x = []
for sub in state.substates:
x.append(sub.i)
除了更短,它是一个表达式,你可以嵌入其他表达式而不是一系列语句。
答案 1 :(得分:0)
您可以通过调用以下方式获取子状态列表:
[substate.i for substate in self.substates]
答案 2 :(得分:0)
列表理解是这样做的方式,正如其他答案所指出的那样。
如果主要状态类的唯一作业是保存子类,则可以使类的行为类似于可迭代。在这个例子中,你给出的主要是语法糖,但它可能很有用。有关如何操作的完整说明是here,但它非常简单:
class PrimaryState(object): #always use "new style" classes! its 2013!
def __init__(self,x,y,z):
self.x = x
self.y = y
self.z = z
self.substates=[]
def __len__(self):
return len(self.substates)
def __getitem__(self, index):
return self.substates[index]
def __iter__(self):
for sub in substates: yield sub
def __contains__(self, item):
return item in self.substates
def add(self, item):
self.substates.append(item)
这样你就可以:
primary = PrimaryState(1,2,3)
primary.add(SubState(4,5,6))
primary.add(SubState(7,8,9))
for item in primary:
print item
# Substate 4,5,6
# Substate 7,8,9
PS:查看PEP-8,命名类的标准python样式指南,依此类推。并使用新的样式类(继承自object)。在路上它很重要!