如何迭代一个对象并将它的所有属性分配给一个列表
从
a = []
class A(object):
def __init__(self):
self.myinstatt1 = 'one'
self.myinstatt2 = 'two'
至
a =['one','two']
如何迭代一个对象并将它的所有属性分配给一个列表
从
a = []
class A(object):
def __init__(self):
self.myinstatt1 = 'one'
self.myinstatt2 = 'two'
至
a =['one','two']
如果您只想存储一堆属性并返回一个列表以便您的 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。
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