0

如何迭代一个对象并将它的所有属性分配给一个列表

a = []

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

a =['one','two']
4

2 回答 2

2

如果您只想存储一堆属性并返回一个列表以便您的 API 可以使用它,请不要创建一个完整的类。改用 a namedtuple。这是一个例子。

>>> import collections
>>> Point = collections.namedtuple('Point', ['x', 'y'])
>>> p = Point(1, 2)
>>> p
Point(x=1, y=2)

如果您的 API 只需要一个序列(不是特别是 a list),您可以p直接传递。如果它特别需要一个列表,则将Point对象转换为列表是微不足道的。

>>> list(p)
[1, 2]

您甚至可以对新创建的类进行子Point类化并添加更多方法(文档有详细信息)。如果namedtuple不能满足您的需求,请考虑对abc.Sequence抽象基类进行子类化或将其用作 mixin。

于 2012-11-18T22:00:47.920 回答
1

list一种方法是通过实现部分或全部容器 API使您的类表现得像一个。根据您使用的外部 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
于 2012-11-18T22:02:25.400 回答