如何在列表派生类中使用列表推导

时间:2019-12-29 22:43:10

标签: python constructor list-comprehension derived-class

我有一个列表派生类,想使用列表理解来分配其内容 这是示例代码:

class MyList(list):
    def __init__(self, some_data):
        self = [Foo(x) for x in some_data]

    def customFilter(self):
        self = [x for x in self if x.Selected]

这当然是行不通的,因为对self的赋值只会创建一个局部变量。 有没有一种不使用for循环的pythonic方法?

2 个答案:

答案 0 :(得分:3)

最好使用Collections.UserList,它是为子类设计的。它为您提供了一个data属性,该属性包含列表内容,并且避免了分配给self的问题:

from collections import UserList

def Foo(c):
    return c * 2

class MyList(UserList):
    def __init__(self, some_data):
        self.data = [Foo(x) for x in some_data]

MyList([1, 2, 3])
# [2, 4, 6]

答案 1 :(得分:2)

为什么不调用list的初始化程序?

list.__init__(self, (Foo(x) for x in some_data))

甚至,为什么还要再上一堂课?

def create_foos(some_data):
    return [Foo(x) for x in some_data]

list(map(Foo, some_data))