首页 > 解决方案 > 如何在列表派生类中使用列表推导

问题描述

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

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 的赋值只是创建了一个局部变量。有没有一种pythonic方法可以在不使用for循环的情况下实现这一点?

标签: pythonconstructorlist-comprehensionderived-class

解决方案


使用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]

推荐阅读