美文网首页
Python 修改内置类型

Python 修改内置类型

作者: Monsty | 来源:发表于2018-12-24 11:39 被阅读0次

之前写到过如何实现列表切分,那如何让这个 listpartition 函数可以像 str.partition 一样调用呢。

直接修改 list 的属性是行不通的,会得到 TypeError: can't set attributes of built-in/extension type 'list' 的报错。所以要通过 builtinscollections 间接达成目的。

builtins 模块提供了对各种内置方法的访问,包括我们要用的 list。而 collections 提供了各种内置类型的 Python 的模拟实现(为了效率,Python 的内置类型基本都是 C 实现)。

代码如下:

# file: mylist.py
import builtins
from collections import UserList 

# 扩展 list 类型
class List(UserList):
    def partition(self, size):
        return [self[i:i+size] for i in range(0, len(self), size)]

# 替换
builtins.list = List
# file: main.py
import mylist
print(list)
print(list(['a', 'b', 'c']).partition(2))
# <class 'mylist.List'>
# [['a', 'b'], ['c']]
print([].__class__)
# <class 'list'>
# 由于命名空间的关系,直接通过 [] 语法构建的列表没有被替换

相关文章

网友评论

      本文标题:Python 修改内置类型

      本文链接:https://www.haomeiwen.com/subject/uibakqtx.html