将对象属性指定给集合中的列表

2024-09-30 08:14:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

a = []

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

a =['one','two']

Tags: 对象self列表属性objectinitdefone
2条回答

一种方法是通过实现部分或全部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

如果您只想存储一堆属性并返回一个列表以便您的API可以使用它,那么不要创建一个完整的类。改用^{}。下面是一个例子。你知道吗

>>> 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不能满足您的需要,请考虑对^{}抽象基类进行子分类或将其用作mixin。你知道吗

相关问题 更多 >

    热门问题