我正在尝试为属性列表创建函数。你如何为这样的东西创建属性函数?
list([1,2,3,4,5]).even()
应该返回:
[2,4]
该方法应该很简单,但我无法将该功能与预定义的对象列表相关联。
答案 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()