我有一个列表派生类,并希望使用列表理解来分配其内容这是示例代码:
class MyList(list):
def __init__(self, some_data):
self = [Foo(x) for x in some_data]
当然,这是行不通的,因为对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))
或者甚至,为什么你需要另一堂课?
def create_foos(some_data):
return [Foo(x) for x in some_data]
或
list(map(Foo, some_data))