创建自定义“列表”属性

时间:2015-05-28 22:54:08

标签: python list

我正在尝试为属性列表创建函数。你如何为这样的东西创建属性函数?

list([1,2,3,4,5]).even()

应该返回:

[2,4]

该方法应该很简单,但我无法将该功能与预定义的对象列表相关联。

2 个答案:

答案 0 :(得分:4)

您无法向任何内置对象添加方法或属性。这是设计的。

相反,您可以创建自己的列表类型,该类型派生自内置的:

class MyList(list):
    def even(self):
        return [x for x in self if x % 2 == 0]

演示:

>>> class MyList(list):
...     def even(self):
...         return [x for x in self if x % 2 == 0]
... 
>>> MyList([1,2,3,4,5]).even()
[2, 4]

有关详情,请参阅文档中的Classes,特别是Inheritance部分。

答案 1 :(得分:4)

你不能像在Ruby中那样使用Python中的monkeypatch内置对象。您必须构建一个新对象,继承list,并将您的方法放在该对象上。

class MyList(list):
    def even(self):
        return [num for num in self if num % 2 == 0]

MyList([1,2,3,4,5]).even()