如何派生内置不可变类型并修其改实例化行为
问题举例
自定义一种新类型的元组,对传入的可迭代对象,我们只保留
其中int类型且值大于0的元素,例如
IntTuple([1, -1, 'abc', 6, ['x', 'y'], 3]) => (1, 6, 3)
如何继承内置tuple实现IntTuple?
分析
对象的初始化有两个部分:__new__和__init__方法,
对于tuple而言,它并没有__init__方法,直接在__new__中初始化
解决思路
继承内置tuple,并实现__new__,在其中修改实例化行为
代码
class IntTuple(tuple): def __new__(cls, iterable): # 过滤iterable f_it = (e for e in iterable if isinstance(e, int) and e > 0) return super().__new__(cls, f_it) int_t = IntTuple([1, -1, 'abc', 6, ['x', 'y'], 3]) print(int_t)
参考资料:python3实用编程技巧进阶