将对象属性分配为按设置顺序列出

时间:2012-11-18 21:44:21

标签: python

如何迭代对象并将其所有属性分配给列表

a = []

class A(object):
    def __init__(self):
        self.myinstatt1 = 'one'
        self.myinstatt2 = 'two'

a =['one','two']

2 个答案:

答案 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