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

标签 python list monkeypatching

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

最佳答案

不,您不能在 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)'

关于python - 是否可以向 Python 列表实例添加方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34698199/

相关文章:

python - 使用 Try 和 Except 时如何在 Python 中单元测试错误

python - 如何将 dunder 方法 monkeypatch 到现有实例?

.net - PowerShell,扩展方法和猴子修补

python - 在 Python 3 中对两个列表进行排序时如何忽略任何空格或空格?

python - 如何将多个Python函数融合在一起

java - 使用 mongodb 查找,同时使用 java 中的吗啡迭代列表

list - 通过连接原子来统一不同长度的列表

python - 使用 Python 写入以 MySQL 数据为源的 HTML 文件?

python - OpenCV 在 Windows 上安装 opencv_contrib

筛选列表值的仅一个单个值的列表