是否可以向Python列表实例添加方法?

时间:2016-01-09 19:55:02

标签: python list monkeypatching

我正在尝试“猴子补丁”列表的实例。请注意,它不是我的列表。我无法控制它的创作。据我所知,这在2.7中是不可能的。我对吗?是否有可能在3.x?

2 个答案:

答案 0 :(得分:6)

不,您无法在list对象上添加或删除属性,而不是在Python 2中,而不是在Python 3中。

最好你可以将这样的对象包装在另一个实例中,一个实现与列表相同的属性和方法,但将访问权限传递给包装的列表对象。

可以使用UserList.UserList() class

实现该包装器
try:
    # Python 2
    from UserList import UserList
except ImportError:
    # Python 3
    from collections import UserList

class ListWrapper(UserList):
    def extra_method(self):
        return """Hi! I'm an extra method on this "list" (wink, wink)"""

演示:

>>> some_list = ['foo', 'bar', 'baz']
>>> wrapped_list = ListWrapper(some_list)
>>> len(wrapped_list)
3
>>> wrapped_list[1]
'bar'
>>> wrapped_list.extra_method()
'Hi! I\'m an extra method on this "list" (wink, wink)'

答案 1 :(得分:2)

这是一种将单个方法添加到"dates.startDate":{ $lte: moment().valueOf() }, "dates.endDate":{ $gte: moment().valueOf() } 的子类的单个实例的轻量级方法

list