在Python中,我可以为列表类定义实例方法map()吗?

时间:2016-02-09 07:05:26

标签: python

我希望为列表类(对于数组)定义实例方法map()join()。例如,对于map()

class list:
    def map(self, fn):
        result = []
        for i in self:
            result.append(fn(i))
        return result

print [1, 3, 5].map(str)

Python中是否可以为list类执行此操作? (如果没有,可以使最后一行[1, 3, 5].map(str)起作用吗?)

1 个答案:

答案 0 :(得分:4)

您的代码会创建一个名为list的新变量,该变量会隐藏原始变量。你可以通过继承来做得更好:

class mylist(list):
    def map(self, fn):
        result = []
        for i in self:
            result.append(fn(i))
        return result

mylist([1, 3, 5]).map(str)

请注意,无法覆盖[]以生成builtins.list

以外的任何内容

所以留下monkeypatching内置。 There's a module for thatforbiddenfruit,用它自己的话说:

  如果在生产代码上使用,

可能会让你陷入地狱。

如果你想要的地方,那么这就是你想要的:

from forbiddenfruit import curse
def list_map(self, fn):
    result = []
    for i in self:
        result.append(fn(i))
    return result
curse(list, "map", list_map)
print [1, 3, 5].map(str)