如何在派生的列表中使用列表理解 class
How to use list comprehension in list derived class
我有一个派生的列表 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 方法来实现这个?
最好使用 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]
为什么不调用 list
的初始化程序?
list.__init__(self, (Foo(x) for x in some_data))
甚至,你为什么需要另一个 class?
def create_foos(some_data):
return [Foo(x) for x in some_data]
或
list(map(Foo, some_data))
我有一个派生的列表 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 方法来实现这个?
最好使用 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]
为什么不调用 list
的初始化程序?
list.__init__(self, (Foo(x) for x in some_data))
甚至,你为什么需要另一个 class?
def create_foos(some_data):
return [Foo(x) for x in some_data]
或
list(map(Foo, some_data))