如何迭代对象并将其所有属性分配给列表
这
a = []
class A(object):
def __init__(self):
self.myinstatt1 = 'one'
self.myinstatt2 = 'two'
到
a =['one','two']
答案 0 :(得分:2)
如果您只想存储一堆属性并返回一个列表以便API可以使用它,那么不要创建一个完整的类。请改用namedtuple
。这是一个例子。
>>> import collections
>>> Point = collections.namedtuple('Point', ['x', 'y'])
>>> p = Point(1, 2)
>>> p
Point(x=1, y=2)
如果您的API只是期望一个序列(不是特定的list
),您可以直接传递p
。如果它需要专门的列表,将Point
对象转换为列表是很容易的。
>>> list(p)
[1, 2]
您甚至可以创建新创建的Point
类的子类,并添加更多方法(文档包含详细信息)。如果namedtuple
无法满足您的需求,请考虑对abc.Sequence
抽象基类进行子类化或将其用作mixin。
答案 1 :(得分:1)
一种方法是通过实施部分或全部container API使您的班级行为像list
。根据您使用的外部API的工作方式,您可能只需要实现__iter__
。如果它需要更多,你总是可以传递它list(a)
,它将使用迭代器构建一个列表。
以下是添加__iter__
方法的简单示例:
class A(object):
def __init__(self):
self.myAttr1 = "one"
self.myAttr2 = "two"
def __iter__(self):
yield self.myAttr1
yield self.myAttr2